Принудительное использование режима haskell-indent-режима вместо haskell-indentation-mode в режиме haskell 2.7? - PullRequest
11 голосов
/ 03 февраля 2011

Я - пользователь Emacs, у которого нет навыков настройки редактора. После того, как я обновил с haskell-mode 2.4 до 2.7, я заметил два изменения:

  • Отступы отличаются как-то, в некотором смысле, мне не совсем нравится. Я не могу понять, что это такое.
  • Что еще более важно: если у меня включен режим cua и выделен блок текста, 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 Ответ

15 голосов
/ 03 февраля 2011

Лучший способ настроить такие вещи - написать пользовательский хук:

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

...