2009-04-29 5 views
66

Chaque jour, je démarre emacs et ouvre exactement les mêmes fichiers que j'avais ouverts la veille. Y a-t-il quelque chose que je puisse ajouter au fichier init.el pour qu'il rouvre tous les tampons que j'utilisais lors de ma dernière sortie d'emacs?Emacs: rouvre les tampons de la dernière session au démarrage?

+0

Semble que la gestion de bureau est différente dans Emacs 21 et 22+. Le sujet est décrit sur cette page: http://www.emacswiki.org/emacs/DeskTop. – hji

Répondre

92

Vous pouvez utiliser le Emacs Desktop library:

Vous pouvez enregistrer le bureau manuellement avec la commande M-x bureau-enregistrer. Vous pouvez également activer l'enregistrement automatique du bureau lorsque vous quittez Emacs, et restauration automatique du dernier bureau sauvegardé Lorsqu'Emacs commence: utiliser le tampon de personnalisation (voir facile personnalisation) pour définir desktop-save-mode t pour les futures sessions , ou ajoutez cette ligne dans votre fichier ~/.emacs:

(desktop-save-mode 1) 
+3

Bonne réponse. Cependant, j'ai remarqué qu'Emacs réorganise l'ordre du tampon entre les sessions. Est-il possible de toujours avoir le même ordre de tampon? – axel22

+1

Emacs .. Je l'aime. :-) – Jack

2

Vous pouvez ouvrir des fichiers dans votre fichier .emacs en utilisant la fonction suivante:

(find-file "/ home/moi/chemin-vers-fichier")

+1

Selon votre solution, le questionneur doit taper dans son dotemacs les noms de fichiers récemment ouverts à chaque fois. Pas vraiment prometteur. –

+1

En fait, il écrit ce qui suit "... ouvrir les mêmes fichiers que j'avais ouverts la veille ...". S'il ouvre les mêmes fichiers, ces entrées ne changeraient pas beaucoup. Tu n'es pas d'accord? – paweloque

+2

@Lewap: l'OP est une femme. Elle n'est pas. Méfiez-vous des hypothèses. – Telemachus

10

Bien que je soupçonne que la question était à la recherche de la fonctionnalité "desktop" d'emacs (voir la réponse ci-dessus), l'approche de Lewap peut être utile si ensemble de fichiers que l'on utilise est vraiment le même ensemble de fichiers. En fait, on peut aller plus loin et de définir des « profils » si l'on a différents ensembles de fichiers utilisés régulièrement ... exemple Quickie:

(let ((profile 
     (read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ") 
     )) 
    (cond 
    ((string-match "acad" profile) 
    (dired "/home/thomp/acad") 
    (dired "/home/thomp/acad/papers") 
    ) 
    ((string-match "lisp" profile) 
    (setup-slime) 
    (lisp-miscellany) 
    (open-lisp-dirs) 
    ) 
    ((string-match "rpg" profile) 
    (find-file "/home/thomp/comp/lisp/rp-geneval/README") 
    (dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval") 
... etc. 

Si vous trouvez que vous passez régulièrement et-vient entre les différents ensembles de Si vous utilisez des fichiers régulièrement utilisés pendant que vous travaillez, pensez à utiliser perspectives et à remplir chaque perspective avec l'ensemble de fichiers régulièrement utilisés.

2

Vous pouvez apporter des améliorations utiles à la fonction de bureau de base. Particulièrement pratique (IMO) sont des méthodes d'auto-sauvegarde du bureau pendant la session, sinon, si votre système plante, vous serez coincé avec le fichier de bureau que vous avez commencé cette session - assez ennuyeux si vous avez tendance à garder Emacs jours à la fois.

http://www.emacswiki.org/emacs/DeskTop

Le wiki contient également des informations utiles sur la persistance des données entre les sessions en général:

http://www.emacswiki.org/emacs/SessionManagement

Pour les ordinateurs de bureau spécifiquement, je pensais que Desktop Recover avait l'air particulièrement prometteur, mais je ne l'ai pas encore essayé.

0

(find-file-noselect "/my/file") l'ouvrira silencieusement, c'est-à-dire sans élever le tampon. Je dis juste.

EDIT Cette commande est interactive; Pour le tester, vous devez évaluer l'expression, par exemple en positionnant le curseur après la dernière parenthèse et en appuyant sur C-x C-e

Diminuer la valeur pas cool; cette commande fonctionne définitivement et est dans le champ de la question.

+1

Je n'ai pas downvote, mais peut-être que votre réponse a été downvoted parce qu'elle ne résout pas la question de savoir comment ouvrir spécifiquement les tampons étaient ouverts dans la session précédente d'Emacs. –

5

Pour le stockage/restauration des tampons/onglets (en particulier elscreen onglets): J'utilise elscreen et la façon dont je gère le stockage/restauration de la session de bureau et la configuration de l'onglet elscreen est le code suivant dans mon fichier .emacs (le les noms utilisés sont explicites et si les fonctions de stockage/restauration ne doivent pas être exécutées chaque fois qu'emacs démarre, commentez simplement les lignes avec "(push # 'elscreen-store kill-emacs-hook)" et "(elscreen-restore)"):

(defvar emacs-configuration-directory 
    "~/.emacs.d/" 
    "The directory where the emacs configuration files are stored.") 

(defvar elscreen-tab-configuration-store-filename 
    (concat emacs-configuration-directory ".elscreen") 
    "The file where the elscreen tab configuration is stored.") 

(defun elscreen-store() 
    "Store the elscreen tab configuration." 
    (interactive) 
    (if (desktop-save emacs-configuration-directory) 
     (with-temp-file elscreen-tab-configuration-store-filename 
      (insert (prin1-to-string (elscreen-get-screen-to-name-alist)))))) 
(push #'elscreen-store kill-emacs-hook) 
(defun elscreen-restore() 
    "Restore the elscreen tab configuration." 
    (interactive) 
    (if (desktop-read) 
     (let ((screens (reverse 
         (read 
         (with-temp-buffer 
          (insert-file-contents elscreen-tab-configuration-store-filename) 
          (buffer-string)))))) 
      (while screens 
       (setq screen (car (car screens))) 
       (setq buffers (split-string (cdr (car screens)) ":")) 
       (if (eq screen 0) 
        (switch-to-buffer (car buffers)) 
        (elscreen-find-and-goto-by-buffer (car buffers) t t)) 
       (while (cdr buffers) 
        (switch-to-buffer-other-window (car (cdr buffers))) 
        (setq buffers (cdr buffers))) 
       (setq screens (cdr screens)))))) 
(elscreen-restore) 
Questions connexes