Форсирование 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) даст вам новое поведение.