2010-12-10 8 views
2

J'ouvre très souvent beaucoup de fenêtres d'explorateur de système de fichiers (sous Linux ou Windows). Ensuite, je fais un gros nettoyage et ferme tout. Souvent, je ferme aussi Emacs par erreur.Emacs: empêche de fermer à partir du bouton du gestionnaire de fenêtres

Je voudrais changer le comportement du bouton 'X' pour minimiser au lieu de fermer (laisser la fermeture à C-x C-c seulement). Je suis presque sûr que c'est possible, mais je ne sais pas comment. Quelqu'un d'aider?

Répondre

1

Une façon possible d'y parvenir est de (ab-) utiliser le mécanisme de confirmation-kill-emacs: il s'agit d'une fonction qui demande à l'utilisateur de confirmer la suppression d'emacs. Cependant, au lieu d'utiliser une fonction interactive, vous pouvez introduire une variable spéciale qui n'est vraie que si la commande kill a été invoquée par C-x C-c, et la fonction confirm simple renvoie la valeur de cette variable.

Mettez ce qui suit dans votre fichier .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

Si vous conseiller la fonction kill-emacs, alors vous pouvez obtenir la fonctionnalité que vous désirez. J'ai un code qui rend mon cadre Emacs invisible (caché), mais vous pouvez l'iconifier à la place avec un code similaire à celui-ci.

(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)) 

La BNB/fonction vraiment-kill-emacs est définie de sorte que vous pouvez réellement tuer emacs si nécessaire.