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