【问题标题】:Forcing haskell-indent-mode over haskell-indentation-mode in haskell-mode 2.7?在haskell-mode 2.7中强制haskell-indent-mode超过haskell-indentation-mode?
【发布时间】:2011-06-20 17:20:13
【问题描述】:

我是 Emacs 用户,没有配置编辑器的技能。在我从haskell-mode 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
   )

【问题讨论】:

    标签: emacs haskell indentation


    【解决方案1】:

    配置这些东西的最好方法是编写一个自定义钩子:

    (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 文件)即可获得新的行为。

    【讨论】:

    • 很好的答案;这比我之前的随机add-hooks 模式要好得多。谢谢!
    • 遗憾的是,这对我没有帮助。我将您提供的代码添加到我的 .emacs 中,但是当我打开 .hs 时,haskell-indentation-mode 仍然处于打开状态。运行 M-x haskell-indentation-mode 按预期将其关闭。
    • @gspr:可能是你有另一个钩子在运行。使用C-h v haskell-mode-hook 查看活动的钩子。或者,似乎实际上有三种缩进模式,所以也许您需要关闭另一种模式?
    • 啊,太好了,这很有帮助!原来my-haskell-mode-hookturn-on-haskell-indentturn-on-haskell-indentation 之前。
    • 抱歉,我不能投票。显然我做到了,然后再次删除它(偶然),现在它说我的投票被锁定了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2012-10-24
    相关资源
    最近更新 更多