-
ace-windowの0.10.0のREADMEの日本語訳です
-
元の文書: https://github.com/abo-abo/ace-window/commit/0577c426a9833ab107bab46c60d1885c611b2fb9
-
ライセンス: GNU Emacsの一部なのでGNU Emacsと同じです
ace-window
切り替え先ウィンドウ選択のためのGNU Emacs向けパッケージ
何をどうする
other-windowコマンドは知っている筈だ。これはウィンドウ2つまでなら素晴らしいがウィンドウの数が増えてくると急速に価値を失っていく。何回も呼び出さねばならず、簡単には予測できないので、お目当てのウィンドウに到達したかを毎回チェックしなければならない。
windmove-leftやwindmove-up等を使うという別のアプローチもある。これらのコマンドは高速だし予測可能だ。欠点はキーバインディングが4つ必要なことだ。キーバインディングの1つにshift+arrowsがあるが、指が届かない。
これはwindmoveのスピードと予測可能な点はそのままに、other-windowのように単一のキーバインディングにパックするためのパッケージだ。
セットアップ
ウィンドウ切り替えは頻繁に行うタスクなので、ace-windowを短いキーバインディングに割り当てるだけ。M-oはデフォルトのEmacsでは重要な何かにバインドされている訳ではないのでお勧め。
使い方
ace-windowはウィンドウが2つあればother-windowを呼び出す(aw-dispatch-alwaysが非nilの場合を除く)。もっとある場合にはウィンドウそれぞれにたいして、左上隅にハイライトされたウィンドウラベルの最初の1文字が与えられる。その文字を押下すればそのウィンドウに切り替わるか、特定のウィンドウの選択するために次の文字絞り込む。ace-jump-modeと異なりポイント位置は変更されない(other-windowと同じ挙動)。
aw-make-frame-charが定義するスペシャル文字(デフォルトはz)は新たにフレームを作成して、そのフレームのウィンドウをターゲットとすることを意味する。新たなフレームの位置はaw-frame-offsetによって与えられる、その前に選択されていたフレームから相対的な位置にセットされる。新たなフレームのサイズはaw-frame-sizeであ与えられる。詳細についてはドキュメント文字列を参照のこと。
ウィンドウの順序は上から下、左から右となる。これはウィンドウレイアウトを覚えておけば、標識文字を見ずにウィンドウが切り替えられることを意味する。たとえば左上隅のウィンドウは常に1(ウィンドウ文字にアルファベットを使用している場合にはa。
上記イメージのように、ace-windowは複数のフレームを跨いで機能する。
ウィンドウの入れ替えと削除
-
プレフィックス引数C-uとともに
ace-windowを呼び出すとウィンドウを入れ替える(swap) -
2連プレフィックス引数C-u C-uとともに
ace-windowを呼び出すと、選択されたウィンドウを削除できる(delete)
アクションの途中変更
ace-windowを呼び出して開始した後にアクションをdeleteやswap等に切り替えるといったことも可能、デフォルトのバインディングは以下の通り:
- x - ウィンドウの削除(delete)
- m - ウィンドウの入れ替え(swap)
- M - ウィンドウの移動(move)
- c - ウィンドウのコピー(copy)
- j - バッファーの選択(select)
- n - 前(previous)のウィンドウを選択
- u - 他(other)のウィンドウでバッファーを選択
- c - 垂直(vertically)あるいは水平(horizontally)にウィンドウを等分に分割(split)
- v - ウィンドウを垂直に分割
- b - ウィンドウを水平に分割
- o - カレントウィンドウを最大化
- ? - これらのバインディングの表示
正しく操作を行うために、これらのキーをaw-keysに含めてはならない。更に2つ以下のウィンドウでこれらのキーを機能させたい場合には、aw-dispatch-alwaysにtをセットする必要がある。
カスタマイゼーション
ace-windowのバインディング以外では:
(global-set-key (kbd "M-o") 'ace-window)
以下のカスタマイゼーションが利用できる:
aw-keys
aw-keys - ウィンドウラベルに使用するイニシャル文字のリスト:
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
aw-keysのデフォルトは0から9であり、これはこれで理に適ったデフォルトではあるが、上記ではキーをホームポジションにセットアップしている。
aw-scope
デフォルトはglobal(ace-windowはフレームを跨いで機能する)。frameにセットすればace-windowはカレントフレームのウィンドウだけを提案する。
aw-background
ウィンドウ切り替え文字の視認性を高めるために、デフォルトではace-windowは利用可能なウィンドウのバックグラウンドカラーを除去して一時的にグレーにセットする。この挙動はace-jump-modeから継承している。
見るべき位置(ウィンドウのそれぞれ左上隅)が既に判っていれば、この挙動は不要かもしれない。グレーのバックグラウンドは以下でオフに切り替えられる:
(setq aw-background nil)
aw-dispatch-always
非nilならたとえウィンドウが1つでもace-windowはread-charを割り当てる。これによりウィンドウが1つ、あるいは2つの際のace-windowとother-windowの動作に差異が生じるだろう。これはアクションを途中で変更して、デフォルトのジャンプとは異なる他のアクションを実行する場合に役に立つ。デフォルトではnil。
aw-dispatch-alist
ace-windowからデフォルトのジャンプ以外にトリガーできるアクションのリスト。デフォルトは以下の通り:
(defvar aw-dispatch-alist
'((?x aw-delete-window "Delete Window")
(?m aw-swap-window "Swap Windows")
(?M aw-move-window "Move Window")
(?c aw-copy-window "Copy Window")
(?j aw-switch-buffer-in-window "Select Buffer")
(?n aw-flip-window)
(?u aw-switch-buffer-other-window "Switch Buffer Other Window")
(?c aw-split-window-fair "Split Fair Window")
(?v aw-split-window-vert "Split Vert Window")
(?b aw-split-window-horz "Split Horz Window")
(?o delete-other-windows "Delete Other Windows")
(?? aw-show-dispatch-help))
"List of actions for `aw-dispatch-default'.")
ace-windowを使用する際にアクション文字の後に文字列が続いていれば、そのアクションのターゲットとなるウィンドウ選択のためにace-windowが再度呼び出される。文字列が続いていなければ、カレントウィンドウが選択される。
aw-minibuffer-flag
非nilならace-windowがアクティブの際に、ミニバッファーにも文字列ace-window-modeを表示する。横並びのウィンドウの数が多いために、モードラインのマイナーモードエリアの文字列ace-window-modeが切り捨てられているときに役に立つ。
aw-ignored-buffers
ウィンドウリストからウィンドウを選択する際に無視すべき、バッファーおよびメジャーモードのリスト。aw-ignore-onが非nilの場合のみアクティブ。しかしウィンドウを識別する固有のラベルをタイプすれば、それらのバッファーを表示するウィンドウでも依然として選択できる。
aw-ignore-on
tならace-windowはaw-ignored-buffersで指定されているバッファーとメジャーモードを無視する。この値を切り替えるにはM-0 ace-windowを使用する。
aw-ignore-current
tならace-windowはselected-windowのリターン値を無視する。
