Вы можете использовать pre- и post-command-hook, чтобы определить, находится ли точка на той же строке после команды, какой она была до нее?
(defun my-auto-indent-remember ()
"Remember the current beginning and end of line."
(setq my-auto-indent-line-beginning-position (line-beginning-position))
(setq my-auto-indent-line-end-position (line-end-position)))
(defun my-auto-indent ()
"Indent if we have changed lines."
(and (boundp 'my-auto-indent-line-beginning-position)
(boundp 'my-auto-indent-line-end-position)
(or (< (point) my-auto-indent-line-beginning-position)
(> (point) my-auto-indent-line-end-position))
(indent-according-to-mode)))
(add-hook 'pre-command-hook 'my-auto-indent-remember)
(add-hook 'post-command-hook 'my-auto-indent)
Я просто не могу представить, что этохорошая идея, между прочим, но я должен был попробовать это:)
С включенным я уже испытал нежелательное повторное отступление, просто пытаясь скопировать этот код после отступа в четыре пробеладля переполнения стека.
Всякий раз, когда отступ не верен, я обнаружил, что быстрый indent-region
почти всегда все исправит.
Этот код не обрабатывает бит "оставляя строку",Кстати, и я не уверен, как это будет работать после команды, если честно.Возможно, вам придется поймать заранее известные команды перемещения и сделать отступ.Вы могли бы легко проверить идею с помощью безусловного (отступ в соответствии с режимом) в my-auto-indent-запомнить, хотя.