2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ace-windowのREADME

Last updated at Posted at 2025-01-01

ace-window

GNU ELPA
MELPA
MELPA Stable

切り替え先ウィンドウ選択のためのGNU Emacs向けパッケージ



何をどうする

other-windowコマンドは知っている筈だ。これはウィンドウ2つまでなら素晴らしいがウィンドウの数が増えてくると急速に価値を失っていく。何回も呼び出さねばならず、簡単には予測できないので、お目当てのウィンドウに到達したかを毎回チェックしなければならない。

windmove-leftwindmove-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

in-action gif

上記イメージのように、ace-windowは複数のフレームを跨いで機能する。

ウィンドウの入れ替えと削除

  • プレフィックス引数C-uとともにace-windowを呼び出すとウィンドウを入れ替える(swap)

  • 2連プレフィックス引数C-u C-uとともにace-windowを呼び出すと、選択されたウィンドウを削除できる(delete)

アクションの途中変更

ace-windowを呼び出して開始した後にアクションをdeleteswap等に切り替えるといったことも可能、デフォルトのバインディングは以下の通り:

  • 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-alwaystをセットする必要がある。

カスタマイゼーション

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-windowread-charを割り当てる。これによりウィンドウが1つ、あるいは2つの際のace-windowother-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-windowaw-ignored-buffersで指定されているバッファーとメジャーモードを無視する。この値を切り替えるにはM-0 ace-windowを使用する。

aw-ignore-current

tならace-windowselected-windowのリターン値を無視する。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?