ユーザーコマンドに応じてバッファを表示したりポップアップさせたりするのは、Emacsでは一般的な操作です。コマンドがこれを実現する方法には、いくつかの異なるやり方があります。
C-x C-f (find-file)
など多くのコマンドは、デフォルトでは選択中のウィンドウを「乗っ取る」ことでバッファを表示し、ユーザーの注意がそのバッファに向けられることを前提としています。
一部のコマンドは、例えば新しいウィンドウを切り出してそこに目的のバッファを表示するなど、選択中のウィンドウを占有しないよう配慮してスマートに表示しようとします。各種ヘルプコマンド(ヘルプを参照)を含むこうしたコマンドは、内部的に display-buffer を呼び出すことで動作します。詳細は display-buffer の動作
を参照してください。
その他のコマンドも display-buffer
と同様の動作をし、さらに表示ウィンドウを選択してそのバッファの編集を開始できるようにします。M-g M-n
(next-error) コマンドがその一例です(コンパイルモードを参照)。こうしたコマンドは、内部的に関数 pop-to-buffer を呼び出すことで動作します。The Emacs
Lisp Reference Manual の ウィンドウ内のバッファへの切り替え
を参照してください。
名称が -other-window
で終わるコマンドは、選択中のウィンドウに一切表示されない点を除けば、display-buffer
と同様に動作します。その際、選択中のウィンドウを分割して新しいウィンドウを作成することがあります(display-buffer
の動作を参照)。これらのコマンドのいくつかは、C-x 4
プレフィックスキーに割り当てられています(別のウィンドウへの表示を参照)。
名称が -other-frame で終わるコマンドは、(i)
選択中のウィンドウに決して表示されない点、および (ii)
目的のバッファを表示する際に、新しいフレームを作成するか、あるいは別のフレーム上のウィンドウを使用することを優先する点を除けば、display-buffer と同様に動作します。これらのコマンドのいくつかは、C-x 5 プレフィックスキーに割り当てられています。
ウィンドウが、現在のバッファに「専用」されることがあります。The Emacs Lisp Reference
Manual の Dedicated
Windows を参照してください。display-buffer
は、ほとんどの場合で専用ウィンドウの再利用を回避します。これは、モードライン上の「d」で示されます(The Mode
Line
を参照)。また、ウィンドウを「強く専用」にすることもでき、これによりウィンドウに表示されているバッファへのあらゆる変更が防止されます。これは、モードライン上の「D」で示されます。
通常、専用ウィンドウは特殊なバッファの表示に使用されますが、インタラクティブな操作においても専用化が有用な場合があります。例えば、M-g M-n next-error
でエラーを表示している際、新たに表示されたソースコードが、参照したいバッファを上書きしてしまうことがあります。そのバッファを専用ウィンドウに設定しておけば、コマンド(display-buffer 経由)は代わりに別のウィンドウを優先して使用します。
コマンド C-x w d (toggle-window-dedicated)
を使用すると、選択中のウィンドウを現在のバッファ専用にするかどうかを切り替えられます。プレフィックス引数を指定すると、そのウィンドウを強固に専用化します。