Wollte teilen, wie meine Sitzungen organisiert sind.
Anforderungen:
- Send-Datei von Terminal zu benutzerdefinierten Emacs Sitzung
- wiederherstellen Sitzung vom Terminal
- Sitzung speichern
Lösung:
Paket installieren (Plugin) workgroups2 ->https://github.com/pashinin/workgroups2
In folgenden Lisp-Code in Ihre ~/.emacs.d/init.el oder ~/.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
Funktion nk-server-start
ist Wird aufgerufen, wenn Emacs gestartet wird. Es hat ein Argument - Sesssion-Name.
Wir können Emacs-Sitzung foo
, indem Sie folgenden Befehl von Terminal starten:
setsid emacs --eval '(nk-server-start "foo")' &
Wenn wir Datei in Sitzung foo
von Terminal öffnen wollen, müssen wir laufen:
setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null &
Wenn wir Sitzung schließen, alle Puffer, Einstellungen usw. werden in der Datei ~/.emacs-local/sessions/foo
gespeichert. Wenn wir den Befehlausführennächste Zeit werden alle Puffer
gestellt werden, da Befehle groß sind und ich bin faul :) ich einige Skripte gemacht und fügte sie zu meinem $PATH
, um dies zu erleichtern:
em_start_foo.sh
- Run-Sitzung, nur verwendet, einmal Sitzung starten
#!/bin/bash
setsid emacs --eval '(nk-server-start "foo")' &
em_foo.sh
- hinzufügen von Dateien zu Sitzung
#!/bin/bash
setsid emacsclient -n -s ~/.emacs-local/server/foo "[email protected]" >> /dev/null &
Jetzt sind wir jus t laufen vom 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
Mehrere Sitzungen können natürlich parallel ausgeführt werden.
Lassen Sie uns sagen, dass wir erstellt auch Skripte em_start_foo_2.sh
, em_start_foo_2.sh
, em_start_foo_3.sh
, em_start_foo_3.sh
(irgendwo in $PATH
natürlich)
Dann können wir etwas tun:
$ 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
Paket workgroups2
ist wirklich toll!
Mein Emacs init mit Session-Optionen-Datei unter: für das https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el
Vielen Dank freundlichen sir :) Funktioniert fantastisch. Zwei Ergänzungen, die ich gemacht habe: (Könntest du mir einfach sagen, ob sie offensichtlich falsch liegen?) Desktop-Dateien-nicht-speichern "* magit"; magit Dateien ignorieren, und auch (add-hook 'auto-save-hook (Lambda() (desktop-save-in-desktop-dir))) – tobeannounced
Der Auto-Speichern-Haken sieht gut aus. 'Desktop-Dateien-nicht-speichern 'muss ein regulärer Ausdruck sein, so dass es falsch aussieht. Wenn du Dinge mit "magit" abgleichst, dann benutze '". * Magit $ "' – phils
Aufgrund des Alters dieser Antwort scheint es, dass der letzte Absatz nicht mehr korrekt ist. Ab mindestens Emacs 25.1.1 wird beim Aktivieren des Desktop-Speicher-Modus ein Leerlauf-Timer gesetzt, der alle 5 Sekunden "Desktop-Auto-Speichern" aufruft. – GDP2