Permalink
Switch branches/tags
Find file
Fetching contributors…
Cannot retrieve contributors at this time
229 lines (156 sloc) 8.02 KB

E2WM : Equilibrium Emacs Window Managaer

概要

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...

キーバインド

パースペクティブ共通

codeパースペクティブ

twoパースペクティブ

htwoパースペクティブ

docパースペクティブ

dashboardパースペクティブ

arrayパースペクティブ

簡易的なカスタマイズなど

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- : code
    • e2wm:dp-doc- : doc
    • e2wm:dp-two- : two
    • e2wm:dp-dashboard- : dashboard
    • e2wm:dp-array- : array

構造体

e2wm:$pst-class 構造体

この構造体でパースペクティブの定義を行う。

  • 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関数)を引数無しで呼ぶ。

e2wm:$pst(perspective) インスタンス構造体

  • name : このパースペクティブの名前、シンボル
  • wm : wlfレイアウトオブジェクト
  • type : class オブジェクトへの参照

e2wm:$wcfg ウインドウ配置構造体

  • wcfg : 本来の current-window-configuration でとれるウインドウ配置オブジェクト
  • pst : パースペクティブのインスタンスのコピー
  • count : デバッグ用カウンタ

e2wm:$plugin構造体

  • name : プラグインの symbol
  • title : 人が読む用のプラグインの名前
  • update : プラグイン本体の関数

ライセンスなど

License GPL v3

Repository http://github.com/kiwanami/emacs-window-manager

SAKURAI, Masashi m.sakurai atmark kiwanami.net