【问题标题】:How to make after-save-hook be invoked on autosave?如何在自动保存时调用保存后挂钩?
【发布时间】:2014-10-01 17:41:53
【问题描述】:

我已经定义了一个 after-save-hook,如果我按 Ctrl-x Ctrl-s 保存它会很好。但是,我注意到几乎任何其他方式触发的保存都不会像预期的那样触发钩子。首先我注意到调用 save-some-buffers 的代码没有触发它,所以我这样做了:

(defadvice save-some-buffers (after after-save-some-buffers activate)
  (run-hooks 'after-save-hook))

这几乎奏效了,只是即使文件没有改变它也会运行钩子,所以它仍然不理想。但后来我注意到自动保存也没有触发它。所以我查阅了文档,找到了 do-auto-save 功能并尝试了同样的技巧:

(defadvice do-auto-save (after after-auto-save activate)
  (run-hooks 'after-save-hook))

那里的钩子根本不执行。 do-auto-save 是一个 C 源函数,所以它可能不会调用任何通常会触发钩子的 elisp。

简而言之,当 emacs 保存我修改后的缓冲区时,我该如何做到这一点,以便 after-save-hook 实际运行?

【问题讨论】:

  • 您能否告诉我们为什么需要在自动保存后运行代码?可能不存在对您问题的直接答案,因此提供有关您正在尝试做的事情的额外信息很有用。

标签: emacs save elisp hook autosave


【解决方案1】:

after-save-hook 在执行save-some-buffers 时运行。如果没有,那就太奇怪了。你能从emacs -Q创建一个repro吗?

【讨论】:

  • FWIW 我也有同样的问题。我想在保存时删除尾随空格,但(add-hook 'before-save-hook 'delete-trailing-whitespace) 不会被auto-save 触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2019-12-16
  • 1970-01-01
相关资源
最近更新 更多