popup-select-window / select-window を拡張する

Emacs のウィンドウを分割しているときに、分割したウィンドウ間を移動する関数である select-window を拡張する機能をふと思い立って書いてみました。
# 書いている当初は、switch-window という似た elisp が既にある事を知らなかったという…orz まあいいよね!w
使用するには、popup.el の機能を使用しているので、popup.el が必須となります。



以下の URL どちらかより、popup-select-window.el を落としてきます。
# Launchpad は、開発中のものを突っ込むので、ちょっとだけ新しかったりするかもです。

また、popup.el が必要なので、これも auto-complete のリポジトリより落としてきます。

これら2つの elisp、popup.el と popup-select-window.el を load-path の通ったディレクトリに置き、以下のコードを .emacs に加えれば完了です。

(require 'popup)
(require 'popup-select-window)
(global-set-key "\C-xo" 'popup-select-window)

キー設定は、既存の select-window を潰す形で定義していますが、ここは好みに応じて好きなキーに割り当てると良いと思います。


popup-select-window の動作としては、以下です。

  • ウィンドウが分割状態にないなら、何もしない
  • ウィンドウが分割されている(2つ)ならば、通常の select-window として振舞う。
  • ウィンドウが分割されている(3つ以上)ならば、popup-menu* を使い縦型インラインで選択し、カーソルの移動先のウィンドウを選択する。
    • 選択しているウィンドウには、オーバレイがかかり、かつ、モードラインの色が赤くなる。



以下、スクリーンショットです。

移動先となるウィンドウは、そのウィンドウに、オーバレイがかかり黄色っぽくなり、かつ、モードラインの色が赤くなります。
同じバッファを開いたウィンドウが2つ以上あると、オーバレイは、同じウィンドウ全てにかかってしまい、移動先が判別しづらくなってしまうので、その場合は、モードラインを頼りにすると良いかもしれません。
同じバッファを複数のウィンドウで開いていても、問題なくなりました。@iRi_E さんありがとうございます。


まあ、似た(というかメインの機能はほぼ同じ?popup.el使う使わないとか細い違いはあるけど…。)機能を持つ elisp が既にあったりしますが、よければどうぞ。

更新時刻

  • 2010/09/25/00:00
  • 2010/09/25/16:20