50 votes

Comment arrêter gracieusement le démon emacs?

Lors de la connexion à Ubuntu, je lance une Emacs (version 23) démon en utilisant Ubuntu programmes de Démarrage. J'ai ensuite commencer à Emacs clients chaque fois que j'ai besoin de modifier quelque chose. Quand j'ai fermeture de session à partir d'Ubuntu, il est dit Emacs est toujours en cours, bien sûr. J'ai besoin de joindre un script quelque part pour dire Gnome à l'arrêt emacs quand j'ai fermeture de session/arrêt.

1) Quel doit être le script ressemble? "kill " emacs" ne semble pas fonctionner.

2) Où dois-je mettre ce script? Il n'y a rien dans les programmes de démarrage (Système->Sessions menu) panneau qui paraît utile. Je préfère quelque chose qui fonctionne dans le compte de l'utilisateur, plutôt que de bidouiller le PostSession script ou quelque chose d'autre avec l'accès root.

34voto

haxney Points 1567

ShreevatsaR a raison, la réponse est kill-emacs ou save-buffers-kill-emacs , qui sont tous les deux interactifs, et peuvent donc être exécutés depuis Emacs avec M-x save-buffers-kill-emacs . C’est probablement la meilleure façon de le faire, car vous pourrez sauvegarder des fichiers modifiés.

Une autre alternative est de créer un fichier shell comme ceci:

 #!/bin/bash
emacsclient -e "(kill-emacs)"
 

Que vous pouvez exécuter où vous voulez (icône de menu, panneau, etc.).

19voto

genehack Points 26851

Cette page linuxquestions.org contient un script Python qui peut être exécuté lors de la connexion et qui écoute l'événement 'enregistrez-vous' que Gnome émet lors de l'arrêt. Vous pouvez modifier cela pour faire la chose 'emacsclient -e "(save-buffers-kill-emacs)"'.

(Nb, je n'ai pas encore testé le script moi-même ...)

9voto

willert Points 755

Un autre addendum à ShreevatsaR: le script python fonctionne à merveille, mais je suggérerais d’utiliser

 emacsclient -e '(let ((last-nonmenu-event nil))(save-buffers-kill-emacs))' 

comme commande. Définir last-non-menu-event sur nil force emacs à passer en mode souris. Vous obtenez ainsi de "jolies" boîtes de dialogue au lieu des invites du mini-tampon.

Ou encore plus de fantaisie (quelque part dans votre configuration emacs):

 (defun shutdown-emacs-server () (interactive)
  (when (not (eq window-system 'x))
    (message "Initializing x windows system.")
    (x-initialize-window-system)
    (when (not x-display-name) (setq x-display-name (getenv "DISPLAY")))
    (select-frame (make-frame-on-display display '((window-system . x))))
  )
  (let ((last-nonmenu-event nil)(window-system "x"))(save-buffers-kill-emacs)))
 

puis:

 emacsclient -e '(shutdown-emacs-server)' 

4voto

sub Points 81

Je pense que l’utilisation d’un script dans /etc/init.d est une solution plus propre. Vérifiez ici pour plus de détails http://www.emacswiki.org/emacs/EmacsAsDaemon

2voto

Soenke Points 21

la réponse de willert contient un petit bug. ça doit ressembler

 
(defun shutdown-emacs-server () (interactive)
  (when (not (eq window-system 'x))
    (message "Initializing x windows system.")
    (x-initialize-window-system)
    (when (not x-display-name) (setq x-display-name (getenv "DISPLAY")))
    (select-frame (make-frame-on-display x-display-name '((window-system . x))))
  )
  (let ((last-nonmenu-event nil)(window-system "x"))(save-buffers-kill-emacs)))
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X