-
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
のリターン値を無視する。