web-dev-qa-db-ja.com

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

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

84
kristina

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

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

 (desktop-save-mode 1)
112
Jared Oberhaus

問題は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.

作業中に定期的に使用されるファイルの異なるセット間を定期的に切り替えることがわかった場合は、 perspectives を使用して、定期的に使用されるファイルの目的のセットを各パースペクティブに入力することを検討してください。

10
dat

バッファー/タブ(具体的には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)
6
sadesyllas

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

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

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

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

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

2
phils

次の関数を使用して、.emacsファイル内のファイルを開くことができます。

(検索ファイル "/ home/me/path-to-file")

1
paweloque