23 Stimmen

Einige Fragen zu emacs desktop-save: wie kann man es ändern, um in ~/.emacs.d/.emacs.desktop zu speichern

Ich habe dies in meiner init.el eingestellt

(desktop-save-mode 1)

Das funktioniert prima, aber ich habe mich gefragt:

  • wie kann ich es so ändern, dass die .emacs.desktop-Dateien in ~/.emacs.d statt in ~/ gespeichert werden

  • wie kann ich verhindern, dass ich gefragt werde, ob ich speichern möchte (dies geschieht nur, wenn ich Emacs nach einem Neustart das erste Mal schließe, von da an geht er von "Ja" aus, was ich immer möchte)

46voto

phils Punkte 68556

Ich verwende die folgende Methode, die bei mir 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, eigentlich habe ich (desktop-save-mode 0) und verwenden Sie dann M-x my-desktop um den Anfang zu machen:

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

Aber das liegt daran, dass meine Sitzung häufig mehr als 100 Dateien umfasst, meist über Tramp, und ich es daher vorziehe, das Laden zu einer manuellen Aufgabe zu machen und die Desktopdatei nicht anderweitig zu verunstalten :)

Ich empfehle einen Blick in das Emacs-Wiki: http://www.emacswiki.org/emacs/DeskTop

Es gibt einige nützliche Erweiterungen der Standardfunktionen. Insbesondere empfehle ich, eine Methode zum automatischen Speichern des Desktops in der Mitte der Sitzung hinzuzufügen, denn es ist wirklich ärgerlich, wenn Ihr System abstürzt, nachdem Emacs mehrere Tage lang gelaufen ist, und Ihr Desktop in der Zwischenzeit nicht gesichert wurde.

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

3voto

jfs Punkte 370717

wie kann ich es ändern, um die .emacs.desktop-Dateien in ~/.emacs.d anstatt in ~/

Anpassen desktop-dirname variabel.

wie kann ich verhindern, dass es mich fragt, ob ich speichern will

Anpassen desktop-save variabel.

0voto

nexayq Punkte 576

Ich wollte Ihnen mitteilen, wie meine Sitzungen organisiert sind.

Anforderungen:

  1. Datei vom Terminal an eine eigene Emacs-Sitzung senden
  2. Sitzung vom Terminal wiederherstellen
  3. Sitzung speichern

Lösung:

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

  2. Fügen Sie den folgenden Lisp-Code in Ihre ~/.emacs.d/init.el oder ~/.emacs ein:

->

(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 wird aufgerufen, wenn emacs gestartet wird. Er hat ein Argument - den Namen der Sitzung.

Wir können emacs-session starten foo indem Sie den folgenden Befehl im Terminal ausführen:

setsid emacs --eval '(nk-server-start "foo")' &

Wenn wir eine Datei in der Sitzung öffnen wollen foo vom Terminal aus ausführen müssen:

setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null &

Wenn wir die Sitzung schließen, werden alle Puffer, Einstellungen usw. in einer Datei gespeichert ~/.emacs-local/sessions/foo

Wenn wir den Befehl setsid emacs --eval '(nk-server-start "foo")' & Beim nächsten Mal werden alle Puffer wiederhergestellt.

Weil Befehle groß sind und ich faul bin :) Ich habe einige Skripte erstellt und sie zu meinem $PATH um dies zu erleichtern:

em_start_foo.sh - Sitzung starten, wird nur einmal zum Starten der Sitzung verwendet

#!/bin/bash

setsid emacs --eval '(nk-server-start "foo")' &

em_foo.sh - Dateien zur Sitzung hinzufügen

#!/bin/bash

setsid emacsclient -n -s ~/.emacs-local/server/foo "$@" >> /dev/null &

Jetzt führen wir es einfach vom Terminal aus:

$ 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

Natürlich können auch mehrere Sitzungen parallel laufen.

Sagen wir, wir haben auch Skripte erstellt 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 etwa so vorgehen:

$ 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 großartig!

Meine emacs-Init-Datei mit Sitzungsoptionen ist verfügbar unter: https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X