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,做一点调试。
我已使用此代码向 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 becauseinhibit-modification-hooks
is temporarily set non-nil.
检查那个钩子上还有什么,等等。IOW,做一点调试。