私はinit.elにこれを設定しています
(desktop-save-mode 1)
これはうまく機能しますが、私だけが疑問に思っていました:
~/ ではなく ~/.emacs.d に .emacs.desktop ファイルを保存するように変更するにはどうすればよいですか?
保存するかどうかを尋ねないようにするにはどうすればよいですか(再起動後にemacsを初めて閉じたときにのみ発生します。それ以降は、はいと想定されます。これは私が常に望んでいることです)
私は私のために働く以下を使用します:
;; 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)
さて、私は実際に設定してから、物事を開始するために(desktop-save-mode 0)
使用します:M-x my-desktop
(defun my-desktop ()
"Load the desktop and enable autosaving"
(interactive)
(let ((desktop-load-locked-desktop "ask"))
(desktop-read)
(desktop-save-mode 1)))
しかし、それは私のセッションが100ファイルを超えることが多く、主にトランプを介しているためです。そのため、デスクトップファイルを壊さずに、手動タスクでロードすることを好みます:)
Emacs Wikiをチェックすることをお勧めします: http ://www.emacswiki.org/emacs/DeskTop
デフォルトの機能にはいくつかの便利な拡張機能があります。特に、セッションの途中でデスクトップを自動保存する方法を追加することをお勧めします。これは、Emacsが数日間実行されているときにシステムがクラッシュし、その間にデスクトップが保存されていない場合に非常に煩わしいためです。
Emacs 24.4以降、デスクトップファイルはデフォルトで定期的に自動保存されます。desktop-auto-save-timeout
変数を参照してください(上記のブロックにも追加しました)。これについてコメントしてくれたGDP2とDexterMorganに感謝します。
~/ ではなく ~/.emacs.d に .emacs.desktop ファイルを保存するように変更するにはどうすればよいですか?
変数をカスタマイズしdesktop-dirname
ます。
保存するかどうかを尋ねないようにするにはどうすればよいですか
変数をカスタマイズしdesktop-save
ます。
私のセッションがどのように構成されているかを共有したかった.
要件:
解決:
パッケージ(プラグイン)のインストール workgroups2 -> https://github.com/pashinin/workgroups2
~/.emacs.d/init.el または ~/.emacs に次の Lisp コードを追加します。
->
(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
関数nk-server-start
は、emacs の起動時に呼び出されます。1 つの引数 (セッション名) があります。
foo
ターミナルから次のコマンドを実行して、emacs-session を開始できます。
setsid emacs --eval '(nk-server-start "foo")' &
foo
ターミナルからセッションでファイルを開く場合は、次を実行する必要があります。
setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null &
セッションを閉じると、すべてのバッファ、設定などがファイルに保存されます~/.emacs-local/sessions/foo
setsid emacs --eval '(nk-server-start "foo")' &
次回コマンドを実行すると、すべてのバッファが復元されます
コマンドが大きく、私は怠け者なので:)$PATH
これを簡単にするために、いくつかのスクリプトを作成して追加しました。
em_start_foo.sh
- セッションを実行します。セッションを開始するために 1 回だけ使用します
#!/bin/bash
setsid emacs --eval '(nk-server-start "foo")' &
em_foo.sh
- セッションにファイルを追加
#!/bin/bash
setsid emacsclient -n -s ~/.emacs-local/server/foo "$@" >> /dev/null &
ターミナルから実行します。
$ 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
もちろん、複数のセッションを並行して実行できます。
スクリプトも作成したとしましょうem_start_foo_2.sh
, em_start_foo_2.sh
, em_start_foo_3.sh
, em_start_foo_3.sh
(もちろんどこかで$PATH
)
次に、次のようなことができます。
$ 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
パッケージworkgroups2
は本当に素晴らしいです!
セッション オプションを含む私の emacs 初期化ファイルは、https ://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el で入手できます。