emacs - 缓冲区修改后不执行更改后的函数

时间:2015-06-26 17:40:11

标签: emacs elisp hook

我已使用此代码

after-change-functions列表添加了一个函数
(defun test-func () 
    (message "foo")) 

(add-hook 'after-change-functions 'test-func nil t)

现在每当我手动更改缓冲区时,test-func就会被调用。但是当我使用insert以编程方式修改缓冲区时,缓冲区的内容会更新,但test-func没有被调用。

有关如何激活test-func每次缓冲区的任何指针都会更新吗?

更新

我正在尝试转换markdown to html并在浏览器上提供该功能,以便每当用户键入一些降价时,html将自动更新。

以下是test-func

的原始实现
(defun impatient-markup-update (&rest args)
  "Update html buffer if markup buffer updates."
  (save-buffer impatient-markup-buffer)
  (with-current-buffer (get-buffer impatient-markup-html-buffer)
    (erase-buffer)
    (insert (shell-command-to-string 
             (format "%s %s" impatient-markup-pandoc impatient-markup-buffer)))))

1 个答案:

答案 0 :(得分:2)

在调用sleep-for之后使用message作为测试,看看您是否看到了该消息。

after-change-functions不一定在你期望的缓冲区中运行你的钩子。正如医生所说:

  

*执行after-change-functions时所做的缓冲区更改不会调用任何更改前或更改后的函数。这是因为inhibit-modification-hooks暂时设置为非零。

检查该挂钩上的其他内容等等。等一下,做一点调试。