如何在保存文件之前让Emacs查询用户(如果用户回答否,则中止)?

时间:2012-06-21 00:24:38

标签: emacs elisp save savefiledialog

我想添加一个额外的提示,询问用户是否确定要保存文件,但仅限于某些“受保护”目录中的文件。假设我有一个函数file-needs-protection-p,它接受​​一个文件名,如果在保存该文件之前应该查询用户,则返回t。当用户试图保存这样的文件时,如何让Emacs询问"This file is protected. Are you sure you want to modify it?"之类的内容,然后如果用户回答否,则让Emacs中止保存?

希望在某处我可以添加一个使用yes-or-no-p的函数的特殊钩子,如果函数返回false,Emacs将中止保存?

2 个答案:

答案 0 :(得分:5)

未经测试,但我认为您应该可以使用before-save-hook来执行测试并提出问题,如果他们回答否,则只是提出错误:

(error "Save aborted by user")

答案 1 :(得分:0)

如果你已经有file-needs-protection-p,我认为其余的都很简单:

(defun save-buffer-check 
  "If the current buffer is a protected file, query the user before saving."
  (if (file-needs-protection-p (buffer-file-name))
      (if (y-or-n-p 
           "This file is protected. Are you sure you want to modify it?")
          (save-buffer))
    (save-buffer)))

将其重新绑定到C-x C-s并查看它是否符合您的要求。我认为你不需要任何特殊的钩子或建议,只是在调用save-buffer之前插入对谓词的调用或者在没有做任何事情的情况下返回的函数。