毎日、emacsを起動して、前日に開いていたのとまったく同じファイルを開きます。私が最後にemacsを終了したときに使用していたすべてのバッファを再び開くように、init.elファイルに追加できるものはありますか?
毎日、emacsを起動して、前日に開いていたのとまったく同じファイルを開きます。私が最後にemacsを終了したときに使用していたすべてのバッファを再び開くように、init.elファイルに追加できるものはありますか?
回答:
Emacsデスクトップライブラリを使用できます。
コマンドMx desktop-saveを使用して、デスクトップを手動で保存できます。Emacsの終了時にデスクトップの自動保存を有効にし、Emacsの起動時に最後に保存されたデスクトップの自動復元を有効にすることもできます。カスタマイズバッファー(簡単なカスタマイズを参照)を使用して、desktop-save-modeをtに設定し、以降のセッションに備えます。 〜/ .emacsファイルのこの行:
(desktop-save-mode 1)
M-:
実行し(setq debug-on-error t)
、その後、呼び出しdesktop-revert
、それがデバッガで怒らエラーをキャッチすることがあります。私にとっては、ローカルなバッファでフレームの復元が失敗することになっていたのは、グローバルな設定でした。(使用emacs --debug-init
するだけでも問題が発生する可能性がありますが、以前の方法を使用しました。)
問題は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.
あなたが定期的に、あなたが仕事として定期的に使用されるファイルの異なるセットの間で前後に切り替える使用することを検討していることが判明した場合の視点を、定期的に使用されるファイルの所望のセットと各視点を取り込みます。
バッファ/タブ(特に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-configuration-directory
しているuser-emacs-directory
ものに置き換えることができる小さな点にすぎません。
基本的なデスクトップ機能に加えることができる便利な拡張機能があります。特に便利な(IMO)は、セッション中にデスクトップを自動保存する方法です。それ以外の場合、システムがクラッシュすると、そのセッションを開始したデスクトップファイルが表示されなくなります。一度に数日。
http://www.emacswiki.org/emacs/DeskTop
wikiには、一般的なセッション間でのデータの永続化に関する有用な情報もあります。
http://www.emacswiki.org/emacs/SessionManagement
特にデスクトップについては、Desktop Recoverは特に有望に見えると思いましたが、まだ試していません。
(find-file-noselect "/my/file")
サイレントに、つまりバッファを上げずに開きます。ただ言って。
EDITこのコマンドはインタラクティブではありません。これをテストするには、式を評価する必要があります。たとえば、最後の括弧の後ろにカーソルを置き、Cx Ceを押します。
これに反対票を投じることはクールではありません。このコマンドは確実に機能し、問題の範囲内です。