2

我想添加一个额外的提示,询问用户是否确定要保存文件,但仅限于某些“受保护”目录中的文件。假设我有一个函数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 将中止保存?

4

2 回答 2

5

未经测试,但我认为您应该能够使用它before-save-hook来执行您的测试并提出您的问题,如果他们回答否,只需提出一个错误:

(error "Save aborted by user")
于 2012-06-21T01:34:39.900 回答
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或者只是返回而不做任何事情。

于 2012-06-21T01:18:35.650 回答