2010-12-18 4 views
18

Ich habe diesen Satz in meinem init.elEinige Emacs Fragen Desktop-sparen: wie man es ändern in sparen ~/.emacs.d/.emacs.desktop

(desktop-save-mode 1) 

Dies funktioniert gut, nur ich frage mich:

  • wie kann ich es die .emacs.desktop Dateien in ~/.emacs.d statt ~/

  • wie kann ich es aufhören, mich zu fragen, ob ich will sparen ändern speichern (tritt nur beim ersten Mal auf, wenn ich Emacs nach einem Reboo schließe t, von da an nimmt sie ja, was ist das, was ich will immer passieren)

Antwort

37

Ich verwende den folgenden, die für mich funktioniert:

;; 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) 

Nun, habe ich eigentlich (desktop-save-mode 0) und dann M-x my-desktop verwenden Dinge Kick-off:

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

Aber das ist, weil meine Session häufig ist mehr als 100 Dateien, meist über Landstreicher, und so bevorzuge ich es, es eine manuelle Aufgabe zu laden, und nicht die Desktop-Datei sonst klobbern :)

Ich empfehle das Emacs Wiki: http://www.emacswiki.org/emacs/DeskTop

Es gibt einige nützliche Verbesserungen der Standardfunktionalität. Insbesondere empfehle ich, eine Methode zum automatischen Speichern Ihres Desktops während der Sitzung hinzuzufügen, da es wirklich nervt, wenn Ihr System abstürzt, wenn Emacs mehrere Tage läuft und Ihr Desktop zwischenzeitlich nicht gespeichert wurde.

Seit Emacs 24.4 wird die Desktop-Datei standardmäßig automatisch gespeichert. Siehe die desktop-auto-save-timeout Variable (die ich auch dem obigen Block hinzugefügt habe). Danke an GDP2 und Dexter Morgan für ihre Kommentare dazu.

+1

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

+0

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

+0

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

3

wie kann ich es ändern, anstatt die .emacs.desktop Dateien in ~/.emacs.d zu sparen von ~/

Anpassen desktop-dirname Variable.

wie kann ich verhindern, dass es mich gefragt, ob ich

anpassen desktop-save Variable speichern wollen.

+0

Cheers, habe ich versucht, ohne Glück Hinzufügen dieser: (Desktop-Save-Modus t) (setq Desktop-dirname „~/.emacs .d/") – tobeannounced

+0

@tobeannounced:' customize' ist * nicht * äquivalent zu 'setq'. Lesen Sie die Hilfe für die Variablen. – jfs

+0

Einstellung Desktop-Verzeichnisname scheint nicht ausreichend zu sein; Ich konnte es nicht funktionieren, bis ich _also_ Desktop-Pfad geändert:/self.herp_derp() – allyourcode

0

Wollte teilen, wie meine Sitzungen organisiert sind.

Anforderungen:

  1. Send-Datei von Terminal zu benutzerdefinierten Emacs Sitzung
  2. wiederherstellen Sitzung vom Terminal
  3. Sitzung speichern

Lösung:

  1. Paket installieren (Plugin) workgroups2 ->https://github.com/pashinin/workgroups2

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