2009-05-11 4 views
14

J'ai lu the page in Emacs wiki qui contient une liste de plugins de gestionnaire de session. Mais après avoir essayé tout cela, je ne suis toujours pas heureux avec aucun d'entre eux.Quels autres gestionnaires de session sont disponibles pour Emacs?

Par comparaison, the VIM session manager enregistre et charge des sessions par nom, qui est l'une des caractéristiques les plus importantes pour moi.

Je veux, en particulier, un gestionnaire de session pour Emacs:

  • Gestion des sessions par nom
  • onglets Enregistrement, écrans, cadres etc ..

Je suis en train d'utiliser Emacs parce qu'il a de très bonnes fonctionnalités mais un bon gestionnaire de session est important pour mon flux de travail.


connexes:

+5

Il serait utile si vous pouviez énumérer ceux que vous avez essayé et n'a pas aimé. – Nifle

+1

+1 Nifle, et vous devriez inclure un lien sur "la page dans emacs wiki", afin que vos lecteurs puissent voir de quoi vous parlez. Un lien vers les documents VIM appropriés aiderait aussi. – dmckee

+3

OK. J'ai pris une pause pour nettoyer ça. La chose est, hevalbaranov, que vous demandez aux gens de vous aider, alors vous pourriez envisager de mettre un peu plus de travail pour le rendre * facile * pour eux de le faire ... – dmckee

Répondre

34

Puisque vous ne voulez pas la fonctionnalité de base du bureau.el, jeter quelques elisp autour:

(defvar my-desktop-session-dir 
    (concat (getenv "HOME") "/.emacs.d/desktop-sessions/") 
    "*Directory to save desktop sessions in") 

(defvar my-desktop-session-name-hist nil 
    "Desktop session name history") 

(defun my-desktop-save (&optional name) 
    "Save desktop with a name." 
    (interactive) 
    (unless name 
    (setq name (my-desktop-get-session-name "Save session as: "))) 
    (make-directory (concat my-desktop-session-dir name) t) 
    (desktop-save (concat my-desktop-session-dir name) t)) 

(defun my-desktop-read (&optional name) 
    "Read desktop with a name." 
    (interactive) 
    (unless name 
    (setq name (my-desktop-get-session-name "Load session: "))) 
    (desktop-read (concat my-desktop-session-dir name))) 

(defun my-desktop-get-session-name (prompt) 
    (completing-read prompt (and (file-exists-p my-desktop-session-dir) 
           (directory-files my-desktop-session-dir)) 
        nil nil nil my-desktop-session-name-hist)) 

EDIT:

Obtenir des votes, il faut donc ajouter politesses comme complétant lecture et d'histoire

+0

Merci, je cherchais quelque chose comme ça et c'est parfait. C'est assez génial pour un emacs noob comme moi. – Ibrahim

+0

@Ibrahim: Mis à jour pour rendre les choses un peu plus agréable – scottfrazer

+0

Solution de génie, y at-il quelque chose que vous ne pouvez pas faire avec un peu d'élisp? ; p –

0

Essayez bureau Emacs. Go here

+1

J'ai déjà essayé desktop.el (comme je l'ai dit 4 fois), il ne supporte pas les sessions de sauvegarde par noms. – sid3k

+4

Où avez-vous dit que vous utilisiez desktop.el? – Nifle

+1

"J'ai essayé tous les plugins sessionmanager pour emacs qui sont écrits dans le wiki mais j'ai vu que le plus utile d'entre eux ne sauvegarde pas les frames, n'utilise pas de noms de session et tous ont vraiment de mauvais noms." – sid3k

4

déjà répondu:

Expliquer vos besoins en détail nous permettent d'offrir une solution plus spécifique pour vous.

Modifier

mode Desktop vous permet d'avoir plus d'un des postes de travail des sessions enregistrées ne sont pas nom mais répertoire basé.

À partir du chapitre Saving Emacs Sessions:

Vous pouvez enregistrer le bureau actuel et reload un enregistré dans un autre répertoire en tapant M-x desktop-change-dir.

En outre, la variable desktop-path vous permet de définir une liste des répertoires pour rechercher les bureaux enregistrés.

Edit 2

Le Elisp code snippet sent by scottfrazer vous permet de nommer votre session, en arrière-plan, il traduit le nom du nom de répertoire approprié pour le mode bureau.

+0

J'ai déjà essayé desktop.el (comme je l'ai dit 4 fois), il ne supporte pas les sessions de sauvegarde par noms. – sid3k

+0

@ Török Gábor: Il prétend avoir essayé la liste de choix, et demande une fonctionnalité très particulière. La formulation de la question était marginale, et le ton passif-agressif, mais la question semble être unique. – dmckee

+0

@dmckee: oui, le commentaire à ma réponse l'a clarifié, c'est pourquoi j'ai essayé de faire remarquer qu'Emacs Desktop gère plusieurs sessions, il ne les sépare pas par des noms mais des répertoires. –

1

Utilisez différents postes de travail par bookmarking les . Simple, rapide à utiliser - appuyez sur une touche et hop, différent bureau. Vous pouvez même faire du vélo parmi eux si vous le souhaitez.

  • utilisation C-x p K (par défaut) pour définir un desktop bookmark. Vous êtes invité à indiquer l'emplacement du fichier de bureau et le nom du signet à utiliser.

  • Utilisez C-x j K (par défaut) pour accéder à un bureau marqué d'un signet. Vous êtes invité à indiquer le nom du signet (avec fin).

Vous avez besoin de Bookmark+ pour cela.

2

Pour les tampons/onglets de stockage/restauration des parties de la question: 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 (les noms Les fonctions utilisées 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 (eq (type-of (desktop-read)) 'symbol) 
     (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) 

EDIT:

J'ai changé le "if (desktop-read)", en elscreen-restore, en "if (eq (type-of (desktop-read))" symbole) "parce que, si emacs est tué au lieu d'être fermé dans les habituels Ainsi, le fichier .emacs.desktop.lock n'est pas supprimé. Ainsi, si pour une raison quelconque la session de bureau ne peut pas être restaurée, la valeur de retour de "(desktop-read)" est une "chaîne", expliquant l'erreur, et non "nil", donc "if" n'échoue pas devrait.

Questions connexes