1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
|
# 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
|