问题 在haskell-mode 2.7中强制haskell-indent-mode超过haskell-indentation-mode?


我是一名Emacs用户,在配置编辑器方面没有任何技能。我升级后 哈斯克尔模式 2.4到2.7,我注意到两个变化:

  • 缩进是 不同 不知何故,在某种程度上我不太喜欢。我无法完全理解它是什么。
  • 更重要的是:如果我启用了cua模式并突出显示一个文本块,则退格/删除会执行  删除整个块,只删除标记中的上一个/下一个字符。

我看到haskell-mode 2.7默认使用次模式haskell-indentation-mode,而2.4的行为以haskell-indent-mode的形式保存。如果我先关闭前者,然后关闭后者,我想恢复的行为(即缩进感觉就像之前一样,退格/删除会删除突出显示的块)。

但是,每当我打开带有.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
   )

5351
2018-02-03 14:38


起源



答案:


配置此类内容的最佳方法是编写自定义钩子:

(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文件)将为您提供新的行为。


15
2018-02-03 20:16



很好的答案;这比随机模式要好得多 add-hook我曾经有过。谢谢! - acfoltzer
可悲的是,这对我没有帮助。我将你给的代码添加到我的.emacs中,但当我打开.hs时,haskell-indentation-mode仍然打开。运行 M-x haskell-indentation-mode 按预期将其关闭。 - gspr
@gspr:可能是你有另一个钩子运行。使用 C-h v haskell-mode-hook 看到活跃的钩子。或者,似乎实际上有三种缩进模式,所以也许你需要关闭另一种模式? - nominolo
啊,太好了,这很有帮助!结果 my-haskell-mode-hook 以前 turn-on-haskell-indent 和 turn-on-haskell-indentation。 - gspr
对不起,我不能upvote btw。显然我做了,然后再次(意外)删除它,现在它说我的投票被锁定。 - gspr


答案:


配置此类内容的最佳方法是编写自定义钩子:

(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文件)将为您提供新的行为。


15
2018-02-03 20:16



很好的答案;这比随机模式要好得多 add-hook我曾经有过。谢谢! - acfoltzer
可悲的是,这对我没有帮助。我将你给的代码添加到我的.emacs中,但当我打开.hs时,haskell-indentation-mode仍然打开。运行 M-x haskell-indentation-mode 按预期将其关闭。 - gspr
@gspr:可能是你有另一个钩子运行。使用 C-h v haskell-mode-hook 看到活跃的钩子。或者,似乎实际上有三种缩进模式,所以也许你需要关闭另一种模式? - nominolo
啊,太好了,这很有帮助!结果 my-haskell-mode-hook 以前 turn-on-haskell-indent 和 turn-on-haskell-indentation。 - gspr
对不起,我不能upvote btw。显然我做了,然后再次(意外)删除它,现在它说我的投票被锁定。 - gspr