我想添加一个额外的提示,询问用户是否确定要保存文件,但仅限于某些“受保护”目录中的文件。假设我有一个函数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将中止保存?
答案 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
之前插入对谓词的调用或者在没有做任何事情的情况下返回的函数。