- perspective 20160609.1444(in MELPA)
- switch between named "perspectives" of the editor
概要
elscreen-separate-buffer-list.el(レビュー) は
elscreenで同等のことを実現します。
persp-mode.elは永続化されるなどより進化しています。
そちらを使うことをおすすめします。
perspective.el は、Emacsでワークスペースを実現します。
ワークスペースというと、ウィンドウマネージャーやデスクトップ環境で
用途別にウィンドウのレイアウトを切り替える機能です。
Emacsでワークスペースといえば、
ウィンドウ構成を切り替えるだけだと思いがちですが、
perspective.elはそれだけでなく、バッファリストも管理します。
つまり、現状のウィンドウ構成切り替えである
- elscreen.el(レビュー)
- spaces.el
などよりも進化しています。
windows.elも一応バッファリストを管理していますが、
単に順番を管理しているだけです。
perspectiveとは「視点・見通し」という意味があり、
現在のワークスペースにおいて選択できるバッファを限定することで
現在のタスクに視点を集中し、見通しを良くします。
こうすることで、Emacs内で複数のプロジェクトを動かしているときに、
そのプロジェクトに集中できるようになります。
バッファリストの管理について気になったのでコードを読んだところ、
idoのバッファ選択の制御と read-buffer-function の設定を
行っていることがわかりました。
helmでのバッファ選択(M-x helm-buffers-list 、 helm-source-buffers-list) は、
idoのバッファリストを呼び出しているので、perspective.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/")))
初めてperspectiveを使う方は
以下のコマンドを実行します。
M-x package-install perspective
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name perspective
設定 150128071612.perspective.1.el(以下のコードと同一)
(require 'perspective)
(persp-mode 1)
;;; モードラインに現在のみのperspective名を表示させるように再定義
(defun persp-update-modestring ()
(when persp-show-modestring
(setq persp-modestring
(list (nth 0 persp-modestring-dividers)
(persp-name persp-curr)
(nth 1 persp-modestring-dividers)))))
(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-created-hook 'persp-register-buffers-on-create)
実行方法
$ wget http://rubikitch.com/f/150128071612.perspective.1.el $ emacs -Q -f package-initialize -l 150128071612.perspective.1.el
persp-modeを有効にした時点で、mainというワークスペースが作成されます。
新しいワークスペースを作ったり切り替えるには
C-x x s (persp-switch) を使います。
現在のワークスペースを削除するには C-x x c (persp-kill) を使います。
この2つさえ知っていればとりあえず使えます。
タスクを始めるために新しいワークスペースを作ると、
そのワークスペース専用の*scratch*バッファが作成され、
他のバッファがすべてリストから見えなくなります。
そこで、新しいワークスペースを作成するときに、
ワークスペースに取り込みたいバッファをhelm選択できるようにしました。
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-x x sでcというperspectiveを作成し、C-SPCで2つのcバッファを選択
Fig3: 最初は *scratch*(c) バッファが作成される
Fig4: helmのバッファリストからは2つのcバッファと*scratch*(c)しか見えない
その後、C-x x s mainを実行すると、
mainのウィンドウ構成が復元され、Fig1に戻ります。
同様にC-x x s elでelバッファのみのワークスペースも作成できます。
Fig5: idoにも対応!
本サイト内の関連パッケージ
- helm - Helm is an Emacs incremental and narrowing framework
- eyebrowse - Easy window config switching
- state - Quick navigation between workspaces
- elscreen-separate-buffer-list - Separate buffer list manager for elscreen
- persp-mode - windows/buffers sets shared among frames + save/load.
- elscreen - Emacs window session manager
- perspeen - An package for multi-workspace
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。