Emacsのウインドウマネージャーです。ポップアップウインドウの出現場所や、 ウインドウの分割などをあらかじめ設定しておいた方法で表示されるように管 理します。
ウインドウの管理だけでなく、作業上便利な付加機能が付いています。
編集対象のバッファについては履歴を管理していますので、行ったり来たりする 編集が多少楽になると思います。
作業シーンによって分割表示方法を切り替えることができます。この分割表示方法 をEclipseにならってパースペクティブと呼んでいます。デフォルトでは、以下の ものを用意しています。
- code: 中央に1つのコードを表示してがっつり読み書きする
- two: 左右2分割してコードの比較や参照をする
- htwo 上下2分割してコードの比較や参照をする
- doc: 長いコードやドキュメントをfollow-modeで読む
- dashboard: たまに見たい、使いたいバッファを集めて置いておく
- array: 開いているバッファを全部表示して全体を眺めたり、視覚的に探したりする
パースペクティブはユーザー側で自由に増やしたり拡張したりできます。自分 の好みにカスタマイズすると、自分でウインドウを分割するような作業がほと んど必要無くなります。
Eclipseの「ビュー」のような、機能を持ったウインドウを増やすことができます。 ここではプラグインと呼んでいます。デフォルトでは以下のようなプラグイン を用意しています。
- 編集中バッファのディレクトリ内のファイル一覧を表示
- バッファ履歴一覧を表示
- Imenuでアウトラインの表示・移動、現在地の表示
- topコマンドの出力を表示、一定時間おきに更新
- 時計の表示
プラグインも自由に増やしたり設定することができます。
必要なもの、環境
ロードパスに e2wm.el, window-layout.el を置き、以下のように呼び出し用の コードを .emacsなどに追加してください。以下の例では、Altキーを押しなが ら「+」を押すとウインドウの管理を開始します。終了する場合は「C-c ; C-q」 です。
;; 最小の e2wm 設定例
(require 'e2wm)
(global-set-key (kbd "M-+") 'e2wm:start-management)
※注意点
Window周りの関数をほとんど乗っ取っていますので、お使いの環境と相性が悪 いことがあるかもしれません。本気のバッファで使う前に、作業に支障が出な いかどうかご確認をお願いします。
TODO...
TODO...
なお、設定のひな形を e2wm-config.el としておいていますので、参考にしてみ てください。
-
pst
: perspective -
e2wm:c-
: カスタマイズ変数 -
e2wm:$
: 構造体定義 -
e2wm:history-
: 履歴管理 -
e2wm:pst-
: パースペクティブフレームワーク -
e2wm:pstset-
: パースペクティブセット -
e2wm:ad-
: アドバイス(switch-to-buffer, pop-to-bufferなど) -
e2wm:plugin-
: プラグインフレームワーク -
e2wm:menu-
: メニュー -
e2wm:def-plugin-
: プラグイン定義 -
e2wm:dp-
: パースペクティブ定義e2wm:dp-code-
: codee2wm:dp-doc-
: doce2wm:dp-two-
: twoe2wm:dp-dashboard-
: dashboarde2wm:dp-array-
: array
この構造体でパースペクティブの定義を行う。
-
name (symbol, 必須): このパースペクティブの名前。
-
extend (symbol): このパースペクティブの継承元名。 以下のものでこのクラスの定義が
nil
だったら継承元を呼ぶ。 -
init (function(), 必須): このパースペクティブのコンストラクタ。 返値として
wset
構造体を返す。 基本的に wset 構造体だけを返すようにして、レイアウトや 必要なフックなどのセットアップが必要であれば下のstartで行う。 init で使える dynamic bind 変数 :prev-selected-buffer
。 -
title (string, 必須): このパースペクティブのタイトル(人が読む用)。
-
main (symbol): wlfのウインドウレイアウトのうち、デフォルトでフォーカスを当てるべき場所の名前。 nilなら適当に選ぶ。
-
start (function(wm)): レイアウトや必要なフックなどのセットアップを行う。引数:wm。 この関数がnilなら何もしない。 (leaveで一時中断して後で再度startが呼ばれることがある。) start で使える dynamic bind 変数 :
prev-selected-buffer
。 -
update (function(wm)): wlfの各windowを更新する際に呼ばれる関数。引数:wm。 この関数がnilなら何もしない。 各Windowのプラグインの更新が行われる前に呼ばれる。 ウインドウの構成の変更や履歴を戻ったりするたびに呼ばれる。
-
switch (function(buffer)):
switch-to-buffer
を乗っ取る関数。引数:buffer。 この関数がnilなら何もしない。返値でnilを返すと本来の動作、 それ以外なら動作を乗っ取ったものとみなしてそのまま終了する。 プラグインの更新などが必要であればe2wm:pst-update-windows
を呼ぶこと。 -
popup (function(buffer)):
pop-to-buffer
,special-display-func
を乗っ取る関数。引数:buffer。 この関数がnilなら何もしない。返値でnilを返すと本来の動作、 それ以外なら動作を乗っ取ったものとみなしてそのまま終了する。 プラグインの更新などが必要であればe2wm:pst-update-windows
を呼ぶこと。 -
leave (function(wm)): このパースペクティブを終了する際に呼ばれる関数。引数:wm。 この関数がnilなら何もしない。
-
keymap (keymap): このパースペクティブで有効にするキーマップのシンボル。nilだと何も設定しない。
-
save (function()):
after-save-hook
で呼ばれる。 選択されているパースペクティブだけ作用。nilだと何もしない。
関数を入れるスロットで継承元を呼ぶ場合は (e2wm:$pst-class-super)
(dynamic bind関数)を引数無しで呼ぶ。
- name : このパースペクティブの名前、シンボル
- wm : wlfレイアウトオブジェクト
- type : class オブジェクトへの参照
- wcfg :
本来の
current-window-configuration
でとれるウインドウ配置オブジェクト - pst : パースペクティブのインスタンスのコピー
- count : デバッグ用カウンタ
- name : プラグインの symbol
- title : 人が読む用のプラグインの名前
- update : プラグイン本体の関数
License GPL v3
Repository https://github.com/kiwanami/emacs-window-manager
SAKURAI, Masashi m.sakurai atmark kiwanami.net