Quería compartir cómo están organizadas mis sesiones.
Requisitos: archivo
- Enviar desde el terminal a la sesión de emacs personalizados
- sesión de restauración de la terminal
- Guardar sesión
Solución:
paquete de instalación (enchufar) workgroups2 ->https://github.com/pashinin/workgroups2
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
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
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
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