Emacs:起動時に最後のセッションからバッファーを再度開きますか?


89

毎日、emacsを起動して、前日に開いていたのとまったく同じファイルを開きます。私が最後にemacsを終了したときに使用していたすべてのバッファを再び開くように、init.elファイルに追加できるものはありますか?


Emacs 21と22+ではデスクトップの処理が異なるようです。トピックはこのページで説明されています:emacswiki.org/emacs/DeskTop
hji 2009年

デスクトップ処理のデフォルトパスの別の変更は、24.3で行われました。github.com/jwiegley/emacs-release/blob/...
pestophagous

回答:


116

Emacsデスクトップライブラリを使用できます。

コマンドMx desktop-saveを使用して、デスクトップを手動で保存できます。Emacsの終了時にデスクトップの自動保存を有効にし、Emacsの起動時に最後に保存されたデスクトップの自動復元を有効にすることもできます。カスタマイズバッファー(簡単なカスタマイズを参照)を使用して、desktop-save-modeをtに設定し、以降のセッションに備えます。 〜/ .emacsファイルのこの行:

 (desktop-save-mode 1)

5
すばらしい答えです。ただし、Emacsがセッション間でバッファの順序を並べ替えていることに気づきました。常に同じバッファー順序にする方法はありますか?
axel22 '18年

誰もが(私が行ったように)問題の仕事にこれを取得している場合は、ここでの問題を診断するための技術です:でデバッグをオンにM-:実行し(setq debug-on-error t)、その後、呼び出しdesktop-revert、それがデバッガで怒らエラーをキャッチすることがあります。私にとっては、ローカルなバッファでフレームの復元が失敗することになっていたのは、グローバルな設定でした。(使用emacs --debug-initするだけでも問題が発生する可能性がありますが、以前の方法を使用しました。)
robenkleene

10

問題はemacsの「デスクトップ」機能(上記の回答を参照)を探すことだったと思いますが、実際に使用するファイルのセットがまったく同じファイルセットである場合は、Lewapのアプローチが役立ちます。実際、定期的に使用されるファイルのセットが異なる場合は、さらに進んで「プロファイル」を定義できます... Quickieの例:

(let ((profile 
       (read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ")
       ))
  (cond
   ((string-match "acad" profile) 
    (dired "/home/thomp/acad")
    (dired "/home/thomp/acad/papers")
    )
   ((string-match "lisp" profile)
    (setup-slime)
    (lisp-miscellany)
    (open-lisp-dirs)
    )
   ((string-match "rpg" profile)
    (find-file "/home/thomp/comp/lisp/rp-geneval/README")
    (dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval")
... etc.

あなたが定期的に、あなたが仕事として定期的に使用されるファイルの異なるセットの間で前後に切り替える使用することを検討していることが判明した場合の視点を、定期的に使用されるファイルの所望のセットと各視点を取り込みます。


6

バッファ/タブ(特にelscreenタブ)を格納/復元するには elscreenを使用し、デスクトップセッションとelscreenタブの構成の格納/復元を管理する方法は、.emacsファイル内の次のコードです(使用される名前は自明です)また、emacsが起動するたびに保存/復元関数を実行する必要がない場合は、「(push# 'elscreen-store kill-emacs-hook)」と「(elscreen-restore)」)の行をコメント化します。

(defvar emacs-configuration-directory
    "~/.emacs.d/"
    "The directory where the emacs configuration files are stored.")

(defvar elscreen-tab-configuration-store-filename
    (concat emacs-configuration-directory ".elscreen")
    "The file where the elscreen tab configuration is stored.")

(defun elscreen-store ()
    "Store the elscreen tab configuration."
    (interactive)
    (if (desktop-save emacs-configuration-directory)
        (with-temp-file elscreen-tab-configuration-store-filename
            (insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
    "Restore the elscreen tab configuration."
    (interactive)
    (if (desktop-read)
        (let ((screens (reverse
                        (read
                         (with-temp-buffer
                          (insert-file-contents elscreen-tab-configuration-store-filename)
                          (buffer-string))))))
            (while screens
                (setq screen (car (car screens)))
                (setq buffers (split-string (cdr (car screens)) ":"))
                (if (eq screen 0)
                    (switch-to-buffer (car buffers))
                    (elscreen-find-and-goto-by-buffer (car buffers) t t))
                (while (cdr buffers)
                    (switch-to-buffer-other-window (car (cdr buffers)))
                    (setq buffers (cdr buffers)))
                (setq screens (cdr screens))))))
(elscreen-restore)

この道を行く人にとっては、Emacsがすでに提供emacs-configuration-directoryしているuser-emacs-directoryものに置き換えることができる小さな点にすぎません。
Joe

2

基本的なデスクトップ機能に加えることができる便利な拡張機能があります。特に便利な(IMO)は、セッション中にデスクトップを自動保存する方法です。それ以外の場合、システムがクラッシュすると、そのセッションを開始したデスクトップファイルが表示されなくなります。一度に数日。

http://www.emacswiki.org/emacs/DeskTop

wikiには、一般的なセッション間でのデータの永続化に関する有用な情報もあります。

http://www.emacswiki.org/emacs/SessionManagement

特にデスクトップについては、Desktop Recoverは特に有望に見えると思いましたが、まだ試していません。


-2

(find-file-noselect "/my/file")サイレントに、つまりバッファを上げずに開きます。ただ言って。

EDITこのコマンドはインタラクティブではありません。これをテストするには、式を評価する必要があります。たとえば、最後の括弧の後ろにカーソルを置き、Cx Ceを押します。

これに反対票を投じることはクールではありません。このコマンドは確実に機能し、問題の範囲内です。


2
私は反対票を投じなかったが、おそらく前のEmacsセッションで開いていたバッファを具体的に開く方法の問題に対処していないため、あなたの答えは反対票を投じたのだろう。
ライアンC.トンプソン

1
それは、元Q.とは何の関係もありませんので、downvoted
RichieHH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.