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

emacs-更改后功能在缓冲区修改后不执行,emacs,elisp,hook,Emacs,Elisp,Hook,我使用此代码在更改函数后向列表中添加了一个函数 (defun test-func () (message "foo")) (add-hook 'after-change-functions 'test-func nil t) 现在,每当我手动更改缓冲区时,testfunc就会被调用。但是,当我使用insert以编程方式修改缓冲区时,缓冲区的内容会得到更新,但不会调用test func 每次更新缓冲区时,是否有关于如何激活测试函数的指针 更新: 我正试图在浏览器上转换并提供服务,这

我使用此代码在更改函数后向
列表中添加了一个函数

(defun test-func () 
    (message "foo")) 

(add-hook 'after-change-functions 'test-func nil t)
现在,每当我手动更改缓冲区时,
testfunc
就会被调用。但是,当我使用
insert
以编程方式修改缓冲区时,缓冲区的内容会得到更新,但不会调用
test func

每次更新缓冲区时,是否有关于如何激活测试函数的指针

更新:

我正试图在浏览器上转换并提供服务,这样每当用户键入一些标记时,html就会自动更新

下面是
testfunc

(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)))))

在调用
消息
后,使用
睡眠
,作为测试,以查看您当时是否看到消息

更改后函数
不一定会在预期的缓冲区中运行钩子。正如医生所说:

*执行
更改后函数时所做的缓冲区更改
不要调用任何更改前或更改后函数。这是因为
禁止修改挂钩
临时设置为非零


检查钩子上还有什么。看,做一点调试。

你怎么知道它没有被调用?如果在
消息
之后使用
睡眠
,或者在
测试函数
中调用
插入
,插入
@@@@@@@@@@@@@@
,会发生什么。我不想使用
睡眠
,因为我需要立即产生副作用。实际上,我正在调用
test func
中的
insert
,但它不起作用。可能有帮助吗?好的,我将注释作为答案发布,并删除了注释。
(let((禁止修改钩子nil))(我的自定义函数))
解决了问题