2009-05-11 13 views
14

He leído the page in Emacs wiki que contiene una lista de complementos de administrador de sesiones. Pero después de probar todo esto, todavía no estoy contento con ninguno de ellos.¿Qué administradores de sesión alternativos están disponibles para Emacs?

En comparación, the VIM session manager guarda y carga sesiones por nombre, que es una de las características más importantes para mí.

En particular, quiero un gestor de sesiones para Emacs que:

  • cómo gestionar las sesiones por nombre
  • Almacenamiento de pestañas, ventanas, marcos, etc ..

que estoy tratando de utilizar Emacs porque tiene muy buenas características, pero un buen administrador de sesión es importante para mi flujo de trabajo.


relacionadas:

+5

Ayudaría si pudiera enumerar los que intentó y no le gustaron. – Nifle

+1

+1 Nifle, y debe incluir un enlace en "la página en wiki de emacs", para que sus lectores puedan ver de lo que está hablando. Un enlace a los documentos de VIM apropiados también ayudaría. – dmckee

+3

OK. Intenté limpiar esto. Lo que sucede es que, hevalbaranov, le estás pidiendo a la gente que te ayude, por lo que podrías considerar poner un poco más de trabajo para que sea * fácil * para ellos hacerlo ... – dmckee

Respuesta

34

Dado que no te gusta la funcionalidad básica del escritorio.EL, arrojar algo elisp alrededor de él:

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

EDITAR:

Para hacer algo de votos, por lo que añadir detalles como que completan lectura e historia

+0

Gracias, estaba buscando algo como esto y esto es perfecto. Esto es bastante asombroso para un novato de emacs como yo. – Ibrahim

+0

@Ibrahim: Actualizado para hacer las cosas un poco más agradables – scottfrazer

+0

Solución Genius, ¿hay algo que no puedas hacer con un poco de elisp? ; p –

0

Trate de escritorio Emacs. Go here

+1

Ya probé desktop.el (como dije 4 veces), no es compatible con guardar sesiones por nombres. – sid3k

+4

¿Dónde dices que usaste desktop.el? – Nifle

+1

"Probé todos los plugins de sessionmanager para emacs escritos en el wiki, pero vi que lo más útil de ellos no guarda los marcos, no usa nombres de sesión y todos tienen nombres realmente malos". – sid3k

4

ya ha respondido:

Al explicar sus requisitos en detalle nos permite ofrecer una solución más específica para usted.

Editar

modo de escritorio le permite tener más de un escritorios sesiones guardadas no son nombre de directorio, pero basan.

Desde el capítulo Saving Emacs Sessions:

Puede guardar el escritorio actual y recarga uno guardado en otro directorio escribiendo M-x desktop-change-dir.

Además, desktop-path variable que permite definir una lista de directorios para buscar los escritorios guardados.

Editar 2

El Elisp code snippet sent by scottfrazer le permite nombrar a su sesión, al igual que en el fondo se traduce el nombre al nombre del directorio adecuado para el modo de escritorio.

+0

Ya probé desktop.el (como dije 4 veces), no es compatible con guardar sesiones por nombres. – sid3k

+0

@ Török Gábor: Afirma haber probado la lista de opciones allí, y está pidiendo una característica muy particular. La formulación de la pregunta fue marginal, y el tono pasivo-agresivo, pero la pregunta parece ser única. – dmckee

+0

@dmckee: sí, el comentario de mi respuesta lo aclaró, por eso intenté señalar que Emacs Desktop maneja varias sesiones, simplemente no las separa por nombres sino por directorios. –

1

Use diferentes escritorios por marcadores ellas . Simple, rápido de usar: presione una tecla y presto, escritorio diferente. Incluso puedes hacer un ciclo entre ellos si quieres.

  • Uso C-x p K (por defecto) para establecer un desktop bookmark. Se le solicitará la ubicación del archivo de escritorio y el nombre del marcador para usar.

  • Use C-x j K (de forma predeterminada) para saltar a un escritorio marcado como favorito. Se le solicita el nombre del marcador (con finalización).

Necesita Bookmark+ para hacerlo.

2

Para los tampones/pestañas almacenar/restaurar partes de la pregunta: utilizo elscreen y la forma en que manejo almacenar/restaurar la sesión de escritorio y la configuración de la lengüeta elscreen es el siguiente código en mi archivo .emacs (los nombres se explican por sí mismos y si las funciones de almacenamiento/restauración no se deben ejecutar cada vez que emacs comienza, simplemente comenten las líneas con "(push # 'elscreen-store kill-emacs-hook)" y "(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) 

EDITAR:

Cambié el "if (desktop-read)", en elscreen-restore, al símbolo "if (eq (type-of (desktop-read))" porque, si se mata a emacs en lugar de cerrarse en el usual manera, el archivo .emacs.desktop.lock no se elimina. Por lo tanto, si por alguna razón la sesión de escritorio no se puede restaurar, el valor de retorno de "(lectura de escritorio)" es una "cadena", explicando el error, y no "nulo", por lo que el "si" no falla, ya que debería.

Cuestiones relacionadas