Emacsのウィンドウを固定する

しむどん 2025-03-02

テキストエディタやIDE(統合開発環境)で何かしらの機能を実行した時、編集画面が勝手に分割されたり表示が切り替わるという事はない。例えば左右に画面分割をしている時、左の画面にソースコード、右の画面にディレクトリツリーを表示していたとする。Gitの操作をしようとすると左の画面に表示していたソースコードが突然Gitの操作画面になるなんて事は、まあない。

しかしGNU Emacs(以降、Emacs)は違う。何かしらの操作やイベントをトリガーにして、画面が分割されたり、表示している内容が変わったりする。それはもう縦横無尽に不規則に表示しているものが目まぐるしく移ろっていく。おそらくEmacs初心者はこれに戸惑う事だろうし、僕も今なお戸惑っている。

しかし案外慣れるものでもあり、そういうものだと割り切って考えれば、画面が切り替わろうとそれほど気にも止めないし、そもそも表示する要素が少なければ気が散らないので、ありといえばありだ。

そうはいってもログを眺めながら何かを実行したり、バッチ処理の完了を待つ間何かをする時など、やはり画面を固定したい時はある。

Emacsの画面の呼び方は、他のシステムやアプリケーションとは少し異なる。ざっくりと説明すると、アプリケーションの表示領域(他のアプリケーションやOSで言うウィンドウ)のことをフレーム、フレーム内のバッファの表示領域(他のアプリケーションでいうと何だろう、ペイン?)の事をウィンドウと呼ぶ。Emacsの場合はウィンドウとバッファは分離されている(他のアプリケーションではこれらが統合されている)。

Emacsで移ろいゆくウィンドウの表示を固定するには、 set-window-dedicated-p を使う事で概ね固定できる。

(set-window-dedicated-p (selected-window) t)

第1引数に設定するWindow、第2引数に固定するかどうかの真偽値を指定する。第1引数に nil を指定した場合は現在選択しているウィンドウを対象とする。第2引数が真(正しくは非nil)であればウィンドウの表示を固定し、偽(nil)であれば固定を解除する。

この事を調べている間にEmacsのウィンドウについての記事で面白いものを見つけた。ウィンドウについての知識を深めたり、ライブラリを知りたいなら目を通してみるとよいかもしれない。

https://qiita.com/ayatakesi/items/94a578172cc582531443#fn-1

使っていて感じた事だけれど、これでは不十分である事が分かった。Emacsではウィンドウを頻繁に切り替えたり分割したりする。 delete-window などを使って、画面を統合する事も多いけれど、それをした時ロックしたウィンドウのみが表示されるようになってしまう事もある。これは使いにくい。