Algunas preguntas sobre cómo guardar el escritorio de emacs: cómo cambiarlo para guardar en ~/.emacs.d/.emacs.desktop
dot-emacs (3)
¿Cómo puedo cambiarlo para guardar los archivos .emacs.desktop en ~ / .emacs.d en lugar de ~ /
Personalizar la variable de desktop-dirname
.
¿Cómo puedo evitar que me pregunte si quiero ahorrar?
Personalizar la variable de desktop-save
.
Tengo este set en mi init.el
(desktop-save-mode 1)
Esto funciona muy bien, solo me preguntaba:
¿Cómo puedo cambiarlo para guardar los archivos .emacs.desktop en ~ / .emacs.d en lugar de ~ /
¿Cómo puedo evitar que me pregunte si deseo guardar? (solo ocurre la primera vez que cierro emacs después de reiniciar, a partir de ese momento se supone que sí, que es lo que siempre quiero que ocurra)
Quería compartir cómo están organizadas mis sesiones.
Requisitos:
- Enviar archivo desde el terminal a la sesión personalizada de emacs.
- Sesión de restauración desde la terminal
- Guardar la sesión
Solución:
Instale el paquete (plugin) workgroups2 -> https://github.com/pashinin/workgroups2
Agregue el 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
La función nk-server-start
se llama cuando se inicia emacs. Tiene un argumento - nombre de la sesión.
Podemos iniciar emacs-session foo
ejecutando el siguiente comando desde la terminal:
setsid emacs --eval ''(nk-server-start "foo")'' &
Si queremos abrir el archivo en la sesión foo
desde la terminal, necesitamos ejecutar:
setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null &
Cuando ~/.emacs-local/sessions/foo
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 buffers serán restaurados
Debido a que los comandos son grandes y estoy flojo :) Hice algunos scripts y los agregué a mi $PATH
para facilitar esto:
em_start_foo.sh
- Ejecutar sesión, utilizada solo una vez para iniciar sesión
#!/bin/bash
setsid emacs --eval ''(nk-server-start "foo")'' &
em_foo.sh
- Agregar archivos a la sesión
#!/bin/bash
setsid emacsclient -n -s ~/.emacs-local/server/foo "$@" >> /dev/null &
Ahora solo corremos 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
Múltiples sesiones se pueden ejecutar en paralelo, por supuesto.
Digamos que también em_start_foo_2.sh
scripts em_start_foo_2.sh
, em_start_foo_2.sh
, em_start_foo_3.sh
, em_start_foo_3.sh
(en algún lugar en $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 de workgroups2
es realmente genial!
Mi archivo de inicio de Emacs con opciones de sesión está disponible en: https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el
Yo uso lo 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 configuré (desktop-save-mode 0)
y luego uso Mx my-desktop
para comenzar:
(defun my-desktop ()
"Load the desktop and enable autosaving"
(interactive)
(let ((desktop-load-locked-desktop "ask"))
(desktop-read)
(desktop-save-mode 1)))
Pero eso se debe a que mi sesión con frecuencia supera los 100 archivos, principalmente a través de tramp, por lo que prefiero hacer que cargarla sea una tarea manual, y de lo contrario no golpear el archivo del escritorio :)
Recomiendo revisar la Wiki de Emacs: http://www.emacswiki.org/emacs/DeskTop
Hay algunas mejoras útiles a la funcionalidad por defecto. En particular, recomiendo agregar algún método para guardar automáticamente su escritorio en la mitad de la sesión, ya que es realmente molesto si su sistema se bloquea 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 periódicamente de forma predeterminada. Consulte la variable desktop-auto-save-timeout
(que también he agregado al bloque anterior). Gracias a GDP2 y Dexter Morgan por sus comentarios sobre esto.