如何编写Emacs钩子以在关闭Dired缓冲区前进行提示?
实现Dired缓冲区关闭前的标记文件提示
你可以用kill-buffer-hook来实现这个需求,这是Emacs内置的钩子,会在缓冲区被关闭前触发。直接把下面这段代码复制到你的Emacs配置文件(比如~/.emacs或者~/.emacs.d/init.el)里就行:
(add-hook 'kill-buffer-hook (lambda () ;; 检查当前缓冲区是否是Dired模式 (when (derived-mode-p 'dired-mode) ;; 获取所有标记的文件,非空则说明有标记 (when (dired-get-marked-files) ;; 弹出确认提示,用户选"否"就终止关闭操作 (unless (y-or-n-p "当前Dired缓冲区有标记的文件,确定要关闭吗? ") (throw 'kill-buffer nil))))))
代码说明:
add-hook:把自定义的匿名函数绑定到kill-buffer-hook钩子上derived-mode-p 'dired-mode:判断当前缓冲区是否为Dired模式,避免干扰其他类型的缓冲区dired-get-marked-files:返回当前Dired缓冲区中所有被标记的文件列表,空列表代表无标记y-or-n-p:弹出简洁的yes/no确认对话框throw 'kill-buffer nil:若用户选择"否",直接终止关闭缓冲区的操作
使用步骤:
- 将代码粘贴到你的Emacs配置文件中
- 重启Emacs,或者在配置文件缓冲区执行
M-x eval-buffer使配置立即生效
之后你关闭带有标记文件的Dired缓冲区时,Emacs就会自动弹出确认提示,防止误操作。
内容的提问来源于stack exchange,提问作者jordan
相关产品推荐
相关产品推荐

