当缓冲区未与文件关联时,我想让 Emacs 询问我是否要保存修改后的缓冲区。要打开新缓冲区(不访问文件),我的 .emacs 文件中有以下函数:
;; Creates a new empty buffer
(defun new-empty-buffer ()
"Opens a new empty buffer."
(interactive)
(let ((buf (generate-new-buffer "untitled")))
(switch-to-buffer buf)
(funcall (and default-major-mode))
(setq buffer-offer-save t)))
我认为将“buffer-offer-save”设置为不为零的值会成功。但是每当我用“kill-this-buffer”杀死缓冲区时,它就会立即被杀死而不询问任何内容。
这发生在 GNU Emacs 23.1.1 上
有任何想法吗?
谢谢,
瓦
编辑添加使用buffers-offer-save
。注:变量buffer-offer-save仅用于exiting Emacs http://www.gnu.org/software/emacs/elisp/html_node/Killing-Buffers.html#index-buffer_002doffer_002dsave-2015.
您可以从此代码开始并将其自定义为您想要的内容:
(add-to-list 'kill-buffer-query-functions 'ask-me-first)
(defun ask-me-first ()
"prompt when killing a buffer"
(if (or buffer-offer-save
(eq this-command 'kill-this-buffer)
(and (buffer-modified-p) (not (buffer-file-name))))
(y-or-n-p (format "Do you want to kill %s without saving? " (buffer-name)))
t))
经过进一步思考,这有点严厉,因为系统会提示您all缓冲区被杀死,并且 Emacs 经常使用大量临时缓冲区。如果您只想在尝试以交互方式终止缓冲区(不与文件关联)时收到提示。
您可以使用此建议,该建议仅在您以交互方式尝试终止缓冲区时提示您:
(defadvice kill-buffer (around kill-buffer-ask-first activate)
"if called interactively, prompt before killing"
(if (and (or buffer-offer-save (interactive-p))
(buffer-modified-p)
(not (buffer-file-name)))
(let ((answ (completing-read
(format "Buffer '%s' modified and not associated with a file, what do you want to do? (k)ill (s)ave (a)bort? " (buffer-name))
'("k" "s" "a")
nil
t)))
(when (cond ((string-match answ "k")
;; kill
t)
((string-match answ "s")
;; write then kill
(call-interactively 'write-file)
t)
(nil))
ad-do-it)
t)
;; not prompting, just do it
ad-do-it))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)