Emacs версия 24.4: новая отвратительная потеря отступа при нажатии RETURN
Начиная с Emacs 24.4, когда я набираю строку, начинающуюся с пробела (типичный способ обозначить новый абзац), и в конце я нажимаю RETURN, пробел исчезает. Эта проблема появляется также с 'emacs -Q'. Мой файл.emacs использует довольно простую схему абзацев в текстовом режиме, а именно:
(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'paragraph-indent-minor-mode)
который работал без проблем в течение десятка лет. Ошибка появилась, когда я установил текущую (24.4) версию.
В основном я печатаю:
This is a line beginning with four spaces
и как только я наберу RETURN, моя строка сразу станет
This is a line beginning with four spaces
То есть отступ исчезает. Я был бы очень признателен за несколько советов. Должен ли я опубликовать ошибку?
3 ответа
В Emacs 24.4 electric-indent-mode
включен по умолчанию. Кажется, что именно это вызывает эту проблему в сочетании с paragraph-indent-minor-mode
, Этого можно избежать, отключив режим Electric Indent везде (M-x electric-indent-mode
) или просто в локальном буфере (M-x electric-indent-local-mode
).
Следующее постараюсь сохранить electric-indent-mode
от наступления на пальцы ног paragraph-indent-minor-mode
, Он не пытается быть надежным во всех ситуациях, но я подозреваю, что в вашей ситуации этого вполне достаточно.
(defvar-local my-local-electric-indent-status :unknown)
(defun my-local-electric-indent-disable ()
"Make `electric-indent-mode' ineffective in the current buffer."
(setq my-local-electric-indent-status electric-indent-mode)
(electric-indent-local-mode -1))
(defun my-local-electric-indent-restore ()
"Restore original status of `electric-indent-mode' in the current buffer."
(unless (eq my-local-electric-indent-status :unknown)
(electric-indent-local-mode my-local-electric-indent-status)))
(add-hook 'paragraph-indent-minor-mode-on-hook #'my-local-electric-indent-disable)
(add-hook 'paragraph-indent-minor-mode-off-hook #'my-local-electric-indent-restore)
Если вы не используете Emacs 24.3, замените defvar-local
с:
(defvar my-local-electric-indent-status :unknown)
(make-variable-buffer-local 'my-local-electric-indent-status)
;;(global-set-key "\em" 'newline);; для emacs 23
global-set-key "\ em" 'electric-newline-and-возможно-indent);; для emacs 24