- psession 20170110.228(in MELPA)
- Persistent save of elisp objects.
概要
psessoin.elを使えば、Emacs終了時に特定の変数を保存し、
再起動時にそれらを復元します。
保存・復元する内容は以下のものです。
- 各種変数
- 開いているファイルバッファ・diredバッファ
- 終了時点のウィンドウ構成
保存される場所は ~/.emacs.d/elisp-objects/ です。
ちなみに、保存・復元するEmacs Lispは古くから windows.el があります。
http://www.gentei.org/~yuuji/software/
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてpsessionを使う方は
以下のコマンドを実行します。
M-x package-install psession
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name psession
設定 140821132526.psession.el(以下のコードと同一)
(require 'dired) ;FIXME (psession-mode 1)
実行方法
$ wget http://rubikitch.com/f/140821132526.psession.el $ emacs -Q -f package-initialize -l 140821132526.psession.el
保存する変数をカスタマイズする
保存する変数は psession-object-to-save-alist で設定します。
このように定義されています。
(defcustom psession-object-to-save-alist '((ioccur-history . "ioccur-history.el") (extended-command-history . "extended-command-history.el") (helm-external-command-history . "helm-external-command-history.el") (helm-surfraw-engines-history . "helm-surfraw-engines-history.el") (psession--save-buffers-alist . "psession-save-buffers-alist.el") (helm-ff-history . "helm-ff-history.el") (helm-grep-history . "helm-grep-history.el") (kill-ring . "kill-ring.el") (kill-ring-yank-pointer . "kill-ring-yank-pointer.el") (register-alist . "register-alist.el") (psession--winconf-alist . "psession-winconf-alist.el")) "Alist of vars to save persistently. It is composed of (var_name . \"var_name.el\"). Where \"var_name.el\" is the file where to save value of 'var_name." :group 'psession :type '(alist :key-type symbol :value-type string))
オブジェクトを永続化する方法
Emacs Lispのオブジェクトは簡単に永続化できます。
永続化している関数はこれですが、これを見ればわかるように、
- print-length
- print-level
- print-circle
- print-quoted
- print-escape-newlines
- print-escape-nonascii
- print-escape-multibyte
を設定し、 prin1 でファイルに書き出せば永続化できます。
他にはバイトコンパイルし、setqを加え、バイトコンパイルし、
バイトコンパイル前のソースを削除しています。
(defun psession--dump-object-to-file (obj file) "Save symbol object OBJ to the byte compiled version of FILE. OBJ can be any lisp object, list, hash-table, etc... Windows configurations and markers are not supported. FILE must be an elisp file with ext \"*.el\" (NOT \"*.elc\"). Loading the *.elc file will restitute object. That may not work with Emacs versions <=23.1 for hash tables." (require 'cl-lib) ; Be sure we use the CL version of `eval-when-compile'. (cl-assert (not (file-exists-p file)) nil (format "dump-object-to-file: File `%s' already exists, please remove it." file)) (unwind-protect (let ((print-length nil) (print-level nil) (print-circle t) (print-quoted t) (print-escape-newlines t) (print-escape-nonascii t) (print-escape-multibyte t)) (with-temp-file file (prin1 `(setq ,obj (eval-when-compile ,obj)) (current-buffer))) (byte-compile-file file) (message "`%s' dumped to %sc" obj file)) (delete-file file)))
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。