emacs dot-emacs

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:

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

Solución:

  1. Instale el paquete (plugin) workgroups2 -> https://github.com/pashinin/workgroups2

  2. 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.