emacs - 缓冲区修改后不执行更改后功能

emacs - after-change-functions are not executed after buffer modification

我已使用此代码向 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 并在浏览器上提供它,这样每当用户输入一些 markdown 时,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)))))

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

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

*Buffer changes made while executing the after-change-functions don't call any before-change or after-change functions. That's because inhibit-modification-hooks is temporarily set non-nil.

检查那个钩子上还有什么,等等。IOW,做一点调试。