&引用;区分、保存或杀死”;在Emacs中终止缓冲区时
尝试终止包含Emacs中更改的缓冲区时,会显示以下消息: 显示“缓冲区[Buffer]已修改;是否仍要终止?(是或否)” 与此相反,我希望Emacs询问我是否愿意: 1.查看变化的差异, 2.保存缓冲区, 3.杀死缓冲区&引用;区分、保存或杀死”;在Emacs中终止缓冲区时,emacs,Emacs,尝试终止包含Emacs中更改的缓冲区时,会显示以下消息: 显示“缓冲区[Buffer]已修改;是否仍要终止?(是或否)” 与此相反,我希望Emacs询问我是否愿意: 1.查看变化的差异, 2.保存缓冲区, 3.杀死缓冲区 如何操作?您需要编写一些代码以放入和列表中。从概念上讲,您想要做的是 测试缓冲区是否已修改 显示您的信息并获取 响应,并按要求执行 然后清除修改的标志,以便 正常的终止缓冲区不会返回 再问一次 答案在于使用,因为钩子通常是在您想要更改的“buffer modified”(缓冲区
如何操作?您需要编写一些代码以放入和列表中。从概念上讲,您想要做的是
(defadvice kill buffer(在我的kill buffer检查激活周围)
“缓冲区即将终止时提示。”
(let*((缓冲区文件名(缓冲区文件名))
备份文件)
;参见“备份缓冲区”
(如果(和(缓冲区修改-p)
缓冲区文件名
(file-exists-p缓冲区文件名)
(setq备份文件(car(查找备份文件名缓冲区文件名)))
(让((回答(完成读取)(格式为“缓冲区修改%s,(d)iff,(s)ave,(k)ill?”(缓冲区名称))
"("d"s"k)无)
(条件((相等答案“d”)
(set-buffer-modified-p nil)
(let((原始缓冲区(当前缓冲区))
(文件到差异(如果(file-newer-than-file-p缓冲区文件名备份文件)
缓冲区文件名
(备份文件)
(设置缓冲区(获取缓冲区创建(格式“%s last revision”(文件名非目录文件为diff)))
(缓冲区禁用撤消)
(将文件内容文件插入到diff nil nil t)
(set-buffer-modified-p nil)
(setq缓冲区只读t)
(ediff缓冲区(当前缓冲区)或原始缓冲区)
((相等答案“k”)
(set-buffer-modified-p nil)
广告(做它)
(t
(保存缓冲区)
广告(做这件事)
广告(做这件事)
kill buffer hook在用户试图更改/避免的提示后运行。另请参见:我将其放在init文件中。现在,当我做M-x包列表包时,Emacs不断给我消息“Buffer modified*http elpa.gnu.org:80
*,diff,save,kill?”。我想有一种方法可以修改代码来避免这种情况,但我对elisp是新手。
(defadvice kill-buffer (around my-kill-buffer-check activate)
"Prompt when a buffer is about to be killed."
(let* ((buffer-file-name (buffer-file-name))
backup-file)
;; see 'backup-buffer
(if (and (buffer-modified-p)
buffer-file-name
(file-exists-p buffer-file-name)
(setq backup-file (car (find-backup-file-name buffer-file-name))))
(let ((answer (completing-read (format "Buffer modified %s, (d)iff, (s)ave, (k)ill? " (buffer-name))
'("d" "s" "k") nil t)))
(cond ((equal answer "d")
(set-buffer-modified-p nil)
(let ((orig-buffer (current-buffer))
(file-to-diff (if (file-newer-than-file-p buffer-file-name backup-file)
buffer-file-name
backup-file)))
(set-buffer (get-buffer-create (format "%s last-revision" (file-name-nondirectory file-to-diff))))
(buffer-disable-undo)
(insert-file-contents file-to-diff nil nil nil t)
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(ediff-buffers (current-buffer) orig-buffer)))
((equal answer "k")
(set-buffer-modified-p nil)
ad-do-it)
(t
(save-buffer)
ad-do-it)))
ad-do-it)))