- persp-mode 20170509.829(in MELPA)
- windows/buffers sets shared among frames + save/load.
概要
elscreen-separate-buffer-list.el(レビュー) は
elscreenで同等のことを実現します。
persp-mode.el は、Emacsでワークスペースを実現します。
perspective.el(レビュー) との違いは、
それぞれのperspectiveが永続化できることです。
Emacs再起動時には開かれているファイルバッファが復元されます。
つまり、save-visited-files.el(レビュー) の機能も含んでいます。
また、perspective.elでのバグが取り除かれているようです。
perspective.elもpersp-mode.elも M-x persp-mode と同じ名前なので、
使う際にはperspective.elは削除してください。
ワークスペースというと、ウィンドウマネージャーやデスクトップ環境で
用途別にウィンドウのレイアウトを切り替える機能です。
Emacsでワークスペースといえば、
ウィンドウ構成を切り替えるだけだと思いがちですが、
persp-mode.elはそれだけでなく、バッファリストも管理します。
つまり、現状のウィンドウ構成切り替えである
- elscreen.el(レビュー)
- spaces.el
などよりも進化しています。
windows.elも一応バッファリストを管理していますが、
単に順番を管理しているだけです。
perspectiveとは「視点・見通し」という意味があり、
現在のワークスペースにおいて選択できるバッファを限定することで
現在のタスクに視点を集中し、見通しを良くします。
こうすることで、Emacs内で複数のプロジェクトを動かしているときに、
そのプロジェクトに集中できるようになります。
バッファリストの管理について気になったのでコードを読んだところ、
idoのバッファ選択の制御と read-buffer-function の設定を
行っていることがわかりました。
helmでのバッファ選択(M-x helm-buffers-list 、 helm-source-buffers-list) は、
idoのバッファリストを呼び出しているので、persp-mode.elはhelmにも対応しています。
anythingでのバッファ選択や標準のC-x C-bは、
idoではなくて直接 (buffer-list) を呼んでいるので
すべてのバッファが見えます。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))
初めてpersp-modeを使う方は
以下のコマンドを実行します。
M-x package-install persp-mode
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name persp-mode
設定 150213062623.persp-mode.el(以下のコードと同一)
(setq persp-keymap-prefix (kbd "C-c p")) ;prefix (setq persp-add-on-switch-or-display t) ;バッファを切り替えたら見えるようにする (persp-mode 1) (defun persp-register-buffers-on-create () (interactive) (dolist (bufname (condition-case _ (helm-comp-read "Buffers: " (mapcar 'buffer-name (buffer-list)) :must-match t :marked-candidates t) (quit nil))) (persp-add-buffer (get-buffer bufname)))) (add-hook 'persp-activated-hook 'persp-register-buffers-on-create)
実行方法
$ wget http://rubikitch.com/f/150213062623.persp-mode.el $ emacs -Q -f package-initialize -l 150213062623.persp-mode.el
persp-modeを有効にした時点で、noneというワークスペースが作成されます。
(perspective.elではmainという名前)
新しいワークスペースを作ったり切り替えるには
C-c p s (persp-switch) を使います。
現在のワークスペースを削除するには C-c p c (persp-kill) を使います。
この2つさえ知っていればとりあえず使えます。
タスクを始めるために新しいワークスペースを作ると、
*scratch*バッファに切り替わり、
(perspective.elではperspective専用のscratchバッファになる)
他のバッファがすべてリストから見えなくなります。
そこで、新しいワークスペースを作成するときに、
ワークスペースに取り込みたいバッファをhelm選択できるようにしました。
(フックの名前が変更されただけでperspectiveでの設定が使える)
C-SPCで複数個選択できます。
もし、ワークスペース作成時にバッファを取り込んでいない場合は、
C-x C-fや recentf (M-x helm-mini 、 M-x helm-for-files 等)から
選択します。
Fig1: data.c/window.c/files.el/window.elを開いている状態
Fig2: C-c p sでcというperspectiveを作成し、C-SPCで2つのcバッファを選択
Fig3: 最初は *scratch*(c) バッファが作成される
Fig4: helmのバッファリストからは2つのcバッファと*scratch*(c)しか見えない
その後、C-c p s noneを実行すると、
noneのウィンドウ構成が復元され、Fig1に戻ります。
同様にC-c p s elでelバッファのみのワークスペースも作成できます。
Fig5: idoにも対応!
本サイト内の関連パッケージ
- helm - Helm is an Emacs incremental and narrowing framework
- eyebrowse - Easy window config switching
- state - Quick navigation between workspaces
- perspective - switch between named "perspectives" of the editor
- elscreen-separate-buffer-list - Separate buffer list manager for elscreen
- save-visited-files - save opened files across sessions
- elscreen - Emacs window session manager
- zoom-window - Zoom window like tmux
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。