2010-12-10 87 views
2

我經常打開很多文件系統資源管理器窗口(在linux或windows下)。然後我做一個大清理,關閉一切。通常,我也會錯誤地關閉Emacs。Emacs:防止從窗口管理器按鈕關閉

我想改變'X'按鈕的行爲來最小化而不是關閉(請僅關注C-x C-c)。我幾乎可以肯定這是可能的,但我不知道如何。任何人提供幫助?

回答

1

實現此目的的一種可能方式是(ab-)使用confirm-kill-emacs機制:這意味着要求用戶確認有關殺死emacs。但是,不是使用交互式函數,而是隻有在通過C-x C-c調用kill命令並且confirm函數簡單返回該變量的值時才引入一個特殊變量。

把你的.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

如果你勸殺-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。