Форсирование haskell-indent-mode через haskell-indentation-mode в haskell-mode 2.7?
Я - пользователь Emacs, не имеющий навыков в отношении настройки редактора. После того, как я обновился с haskell-mode от 2.4 до 2.7, я заметил два изменения:
- Отступы как-то разные, в некотором роде мне не очень нравится. Я не могу сказать, что это такое.
- Что еще более важно: если у меня включен режим cua-mode и выделяется блок текста, backspace/delete не удаляет весь блок, а только предыдущий/следующий символ из моего маркера.
Я вижу, что режим haskell-mode 2.7 по умолчанию использует режим haskell-indentation-mode второстепенного режима, в то время как поведение 2.4 сохранено в форме haskell-indent-mode. Если я сначала отключу первый, а затем последний, то поведение, которое я хочу, восстанавливается (например, отступы чувствуют себя как раньше, а backspace/delete удаляет выделенные блоки).
Я не могу, однако, получить это автоматически, когда я открываю файл с суффиксом .hs. Я пробовал разные вещи, похожие на
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent-mode)
и тому подобное, но я либо закончил со стандартным режимом, либо с обычным режимом haskell без отступа и документа.
Любые идеи?
Решение (спасибо nominolo):
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indent)
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook)
(defun my-haskell-mode-hook ()
(haskell-indentation-mode -1) ;; turn off, just to be sure
(haskell-indent-mode 1) ;; turn on indent-mode
)
Ответы
Ответ 1
Лучший способ настроить такие вещи - написать пользовательский hook:
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook)
(defun my-haskell-mode-hook ()
(haskell-indentation-mode -1) ;; turn off, just to be sure
(haskell-indent-mode 1) ;; turn on indent-mode
;; further customisations go here. For example:
(setq locale-coding-system 'utf-8 )
(flyspell-prog-mode) ;; spell-checking in comments and strings
;; etc.
)
Вы также можете использовать анонимную функцию, но иметь именованную функцию проще, если вы хотите поэкспериментировать с некоторыми настройками. Простое переопределение функции (и повторное открытие файла Haskell) даст вам новое поведение.