2010-12-18 10 views
18

tengo este conjunto en mi init.elemacs-escritorio ahorrar preguntas: cómo cambiarlo para ahorrar en ~/.emacs.d/.emacs.desktop

(desktop-save-mode 1) 

Esto funciona muy bien, sólo yo se preguntaba:

  • cómo puedo cambiarlo para guardar los archivos .emacs.desktop en ~/.emacs.d en lugar de ~/

  • cómo puedo evitar que se me pregunta si quiero para guardar (solo ocurre la primera vez que cierro emacs después de un reboo t, a partir de entonces se supone que sí, que es lo que siempre quiero que suceda)

Respuesta

37

uso el siguiente, que funciona para mí:

;; Automatically save and restore sessions 
(setq desktop-dirname    "~/.emacs.d/desktop/" 
     desktop-base-file-name  "emacs.desktop" 
     desktop-base-lock-name  "lock" 
     desktop-path    (list desktop-dirname) 
     desktop-save    t 
     desktop-files-not-to-save "^$" ;reload tramp paths 
     desktop-load-locked-desktop nil 
     desktop-auto-save-timeout 30) 
(desktop-save-mode 1) 

Bueno, en realidad establece (desktop-save-mode 0) y luego usar M-x my-desktop a poner las cosas fuera:

(defun my-desktop() 
    "Load the desktop and enable autosaving" 
    (interactive) 
    (let ((desktop-load-locked-desktop "ask")) 
    (desktop-read) 
    (desktop-save-mode 1))) 

Pero eso es porque mi sesión es con frecuencia más de 100 archivos, principalmente a través de vagabundeo, por lo que prefiero que cargarlo sea una tarea manual y no bloquear el archivo de escritorio; de lo contrario :)

Recomiendo consultar la Wiki de Emacs: http://www.emacswiki.org/emacs/DeskTop

Existen algunas mejoras útiles en la funcionalidad predeterminada. En particular, recomiendo agregar algún método de guardado automático de su escritorio a mitad de sesión, ya que es realmente molesto si su sistema falla cuando Emacs se ha estado ejecutando durante varios días, y su escritorio no se ha guardado en el ínterin.

Desde Emacs 24.4, el archivo de escritorio se guarda automáticamente de manera predeterminada. Vea la variable desktop-auto-save-timeout (que también he agregado al bloque anterior). Gracias a GDP2 y a Dexter Morgan por sus comentarios sobre esto.

+1

Muchas gracias, señor :) Funciona fantásticamente. Dos adiciones que hice: (¿podría decirme si están obviamente equivocadas?) Desktop-files-not-to-save "* magit"; ignorar archivos de magit, y también (add-hook 'auto-save-hook (lambda)() (desktop-save-in-desktop-dir))) – tobeannounced

+0

El gancho de guardado automático se ve bien. 'desktop-files-not-to-save' debe ser una expresión regular, por lo que se ve mal. Si está combinando elementos que terminan en "magit", utilice '". * Magit $ "' – phils

+0

Debido a la edad de esta respuesta, parece que el último párrafo ya no es preciso. Desde al menos Emacs 25.1.1, habilitar 'desktop-save-mode' establece un temporizador inactivo que llama a' desktop-auto-save' cada 5 segundos. – GDP2

3

cómo puedo cambiarlo para guardar los archivos .emacs.desktop en ~/.emacs.d vez de ~/

Personalizar desktop-dirname variable.

cómo puedo evitar que se me pregunta si yo quiero salvar

Personalizar desktop-save variable.

+0

Saludos para eso, traté de añadir esta sin suerte: (escritorio en el Modo Ahorro t) (setq escritorio-nombredir "~/.emacs .d/") – tobeannounced

+0

@tobeannounced:' customize' es * no * equivalente a 'setq'. Lea la ayuda para las variables. – jfs

+0

configuración desktop-dirname parece ser insuficiente; No pude hacer que funcione hasta que también cambié Desktop-path:/self.herp_derp() – allyourcode

0

Quería compartir cómo están organizadas mis sesiones.

Requisitos: archivo

  1. Enviar desde el terminal a la sesión de emacs personalizados
  2. sesión de restauración de la terminal
  3. Guardar sesión

Solución:

  1. paquete de instalación (enchufar) workgroups2 ->https://github.com/pashinin/workgroups2

  2. Agregar siguiente código Lisp a su ~/.emacs.d/init.el o ~/.emacs:

->

(setq server-socket-dir "~/.emacs-local/server") 

(defun nk-server-start (custom-server) 
    ; (nk-server-start "abe") 
    (setq server-name custom-server) 
    (server-start) ; run emacs server 
    (setq wg-session-file (concat "~/.emacs-local/sessions/" custom-server)) 
    ; (setq wg-session-file "~/.emacs-local/sessions/foo") 
    (workgroups-mode 1) 
    (wg-switch-to-workgroup custom-server) 
    ) 
; Run file in specific server (foo) 
    ; emacsclient -n callback.sh -s ~/.emacs-local/server/foo 

; Show server name in title bar 
(setq frame-title-format '("" "%b @ " server-name)) 
    ; https://www.emacswiki.org/emacs/FrameTitle 

; ;; What to do on Emacs exit/workgroups-mode exit? 
(setq wg-emacs-exit-save-behavior   'save)  ; Options: 'save 'ask nil 
(setq wg-workgroups-mode-exit-save-behavior 'save)  ; Options: 'save 'ask nil 

función es nk-server-start llamado cuando se inicia emacs. Tiene un argumento - nombre de sesión.

Podemos empezar emacs-sesión de foo ejecutando siguiente comando desde la terminal:

setsid emacs --eval '(nk-server-start "foo")' & 

Si queremos abrir el archivo en sesión foo de la terminal hay que ejecutar:

setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null & 

Cuando cerrar sesión, todos los buffers, configuraciones, etc. se guardan en el archivo ~/.emacs-local/sessions/foo

Cuando ejecutamos el comando setsid emacs --eval '(nk-server-start "foo")' & próxima vez, todos los tampones se restaurará

Debido a que los comandos son grandes y estoy perezoso :) Hice algunas secuencias de comandos y los añadí a mi $PATH con el fin de aliviar esta:

em_start_foo.sh - Ejecutar sesión, utilizado solamente una vez para iniciar sesión

#!/bin/bash 

setsid emacs --eval '(nk-server-start "foo")' & 

em_foo.sh - Añadir archivos a la sesión

#!/bin/bash 

setsid emacsclient -n -s ~/.emacs-local/server/foo "[email protected]" >> /dev/null & 

Ahora jUS t ejecutar desde la terminal:

$ em_start_foo.sh     # start foo session 
$ em_foo.sh file_1.txt   # open file_1.txt in foo session 
$ em_foo.sh file_2.txt file_3.txt # open file_2.txt and file_3.txt in foo session 

Se pueden ejecutar varias sesiones en paralelo, por supuesto.

Digamos que hemos creado también guiones em_start_foo_2.sh, em_start_foo_2.sh, em_start_foo_3.sh, em_start_foo_3.sh (en algún lugar de $PATH por supuesto)

Entonces podemos hacer algo como esto:

$ em_start_foo.sh   # start foo session 
$ em_start_foo_2.sh  # start foo_2 session in separate emacs 
$ em_foo.sh file_1.txt  # open file_1.txt in foo session 
$ em_foo_2.sh a.txt b.txt # open a.txt and b.txt in foo_2 session 

$ em_start_foo_3.sh  # start foo_3 session 
$ em_foo_3.sh tmp.txt  # open tmp.txt in foo_3 session 

##### Close emacs foo_2 from gui - session is automatically saved ### 

$ em_start_foo_2.sh  # start foo_2 session with all buffers restored 

paquete workgroups2 es realmente genial!

Mis emacs archivo INIT con opciones de sesión está disponible en: https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el

Cuestiones relacionadas