当从SMIE规则函数调用时,Emacs“message”函数不会自动更新* Messages *

时间:2013-01-08 23:38:46

标签: emacs elisp smie

我在Emacs中打开了两个缓冲区,每个缓冲区都在自己的窗口中,其中一个缓冲区是*Messages*缓冲区(例如,假设另一个缓​​冲区是*scratch*)。打印到回声区域的大多数内容都会立即显示在*Messages*缓冲区中。换句话说,如果我在*scratch*并按C-g,则会立即将“退出”打印到*Messages*缓冲区。如果我将(message "hi")输入*scratch*缓冲区并eval,则*Messages*缓冲区也会立即更新。

但是,当我尝试从SMIE message调用rules-function函数时,*Messages*缓冲区不会立即更新,我必须切换到它(C-x o)以便更新它,或从其他缓冲区(C-M-v)滚动它。

这对于解决这个问题显然微不足道,但是在调试SMIE缩进规则函数时,用messages打印东西是非常有用的,这就是我正在做的事情。当我在源代码中的特定位置点击tab时,有时会多次调用此函数,并使用不同的参数(例如:before:after作为相同的标记),导致多行打印到*Messages*

也许我正在咆哮错误的树,实际上SMIE规则函数永远不应该被多次调用?在那种情况下,我想这将是这个SMIE模式的词汇规范中的一个错误?我正在摆弄sml-mode.el并且当点位于“定义等于”之后的某一行时它被调用两次:

val x =
|

该点为|

1 个答案:

答案 0 :(得分:1)

规则函数被调用两次是正常的。不确定为什么消息没有以相同的方式出现在* Messages *中,但这并不是因为SMIE对它做了一些特殊的事情。要调试smie规则,我个人使用Edebug(在你需要调试的smie-rules函数中点击C-u C-M-x)。