Emacs:阻止从窗口管理器按钮关闭

时间:2010-12-10 11:08:32

标签: emacs

我经常打开很多文件系统资源管理器窗口(在linux或windows下)。然后我做了一个大清理并关闭一切。通常,我也错误地关闭了Emacs。

我想更改“X”按钮的行为以最小化而不是关闭(仅限于C-x C-c)。我几乎可以肯定这是可能的,但我不知道如何。有人帮忙吗?

2 个答案:

答案 0 :(得分:1)

实现此目的的一种可能方法是(ab-)使用confirm-kill-emacs机制:这是一个要求用户确认杀死emacs的函数。但是,除了使用交互式函数之外,您还可以引入一个特殊变量,该变量仅在通过C-x C-c调用kill命令时才为真,并且confirm函数simple返回该变量的值。

将以下内容放入.emacs文件中:

(defvar killed-from-keyboard nil)

(setq confirm-kill-emacs '(lambda (prompt) killed-from-keyboard))

(defun save-buffers-kill-emacs-from-keyboard (&optional arg)
  (interactive)
  (condition-case nil
      (progn (setq killed-from-keyboard t)
             (save-buffers-kill-terminal arg))
    ((quit error) 
     (setq killed-from-keyboard nil))))

(global-set-key [(control x) (control c)] 'save-buffers-kill-emacs-from-keyboard)

答案 1 :(得分:1)

如果您建议使用kill-emacs功能,那么您可以获得所需的功能。我的代码使我的emacs框架不可见(隐藏),但您可以使用类似于以下代码的图标化它。

(defvar bnb/really-kill-emacs nil)
(defadvice kill-emacs (around bnb/really-exit activate)
  "Only kill emacs if a prefix is set"
  (if bnb/really-kill-emacs
      ad-do-it)
    (iconify-frame))

(defun bnb/really-kill-emacs ()
  (interactive)
  (setq bnb/really-kill-emacs t)
  (kill-emacs))

定义了bnb / really-kill-emacs函数,以便您可以在必要时杀死emacs。