Emacs:如何使用GUI关闭按钮杀死(C-x 4 0)帧的缓冲区?

时间:2014-09-13 08:21:48

标签: emacs

我知道将鼠标用作Emacs用户是一个坏习惯。但是,有时通过单击Finder左上角的红色“x”关闭按钮而不是仅仅重复使用C-x 4 0来关闭我的多个Emacs帧中的“一些”是方便的。

有没有办法重新绑定OS X GUI关闭按钮来杀死(C-x 4 0)帧的缓冲区 - 也就是说,同时杀死缓冲区和帧?如果缓冲区没有文件名,Emacs会要求我保存或丢弃缓冲区。

我的Emacs在OS X上是24.3.1。

1 个答案:

答案 0 :(得分:1)

首先,将鼠标与Emacs一起使用 不是。恰恰相反。但是,正如你所说,它可能是一个糟糕的习惯:任何过度的事都可能是一个坏习惯。 Emacs特别适用于鼠标(Emacs鼠标比平时更强大),并且没有鼠标它工作正常。使用鼠标有利于:直接访问任何位置,只需指向。

是的,当您单击窗口管理器delete-frame图标(或窗口管理器用于删除窗口的任何图标)时,您可以使Emacs执行命令(例如X)。你这样做:

(define-key special-event-map [delete-frame] 'delete-frame)

请参阅(elisp) Special Events

(在库thumb-frm.el中,我使用最小化图标(可选)来缩放框架,作为另一个示例。)


更具体地回答您的评论问题。此代码提示要终止缓冲区(默认值:当前缓冲区)。如果只有一个帧,则退出Emacs。否则,它只删除选定的帧。

(defun foo (&optional buffer)
  (interactive (list (read-buffer "Buffer: " (current-buffer))))
  (if (not (cadr (frame-list)))
      (save-buffers-kill-terminal) ; Kill Emacs, if last frame
    (kill-buffer buffer)
    (delete-frame (selected-frame) 'FORCE)))

(define-key special-event-map [delete-frame] 'foo)