GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Switching-Buffers.html ・ emacs-doc.conao3.com

29.14 ウィンドウ内のバッファへの切り替え

本節では、あるウィンドウで指定したバッファに切り替えるための高レベル関数について説明します。一般に、「バッファへの切り替え」とは、(1) あるウィンドウにバッファを表示し、(2) そのウィンドウを選択中のウィンドウ(およびそのフレームを選択中のフレーム)とし、(3) そのバッファを現在のバッファとすることを意味します。

Lispプログラムからアクセスしたり変更したりするために、これらの関数を使ってバッファを一時的にカレントにすることはしないでください。これらの関数には、ウィンドウ履歴を変更する(ウィンドウ履歴を参照)といった副作用があり、そのような使い方をするとユーザーが驚くことになります。Lispでバッファを変更してアクセスするためにカレントにしたい場合は、with-current-buffer、save-current-buffer、またはset-bufferを使用してください。カレントバッファを参照してください。

コマンド: switch-to-buffer buffer-or-name &optional norecord force-same-window

このコマンドは、選択中のウィンドウに buffer-or-name を表示し、それを現在のバッファにしようと試みます。インタラクティブに(C-x b のバインドとして)使用されるほか、Lisp プログラム内でも頻繁に利用されます。戻り値は、切り替えられたバッファです。

buffer-or-name が nil の場合、other-buffer が返すバッファがデフォルトとなります(バッファリスト を参照)。buffer-or-name が既存のどのバッファの名前でもない文字列の場合、この関数はその名前で新しいバッファを作成します。新しいバッファのメジャーモードは変数 major-mode によって決定されます(メジャーモード を参照)。

通常、指定されたバッファは、グローバルバッファリストと選択フレームのバッファリストの両方において、バッファリストの先頭に配置されます(バッファリストを参照)。ただし、オプション引数 norecord が nil 以外の場合は、この処理は行われません。

選択したウィンドウがバッファの表示に適さない場合があります。これは、選択したウィンドウがミニバッファウィンドウである場合や、選択したウィンドウがそのバッファ専用に割り当てられている場合に起こります(専用ウィンドウを参照)。このような場合、通常、コマンドはpop-to-bufferを呼び出すことで、別のウィンドウにバッファを表示しようとします(後述)。

オプション引数 force-same-window が nil ではなく、かつ選択中のウィンドウがバッファの表示に適していない場合、この関数を非対話的に呼び出すと常にエラーが報告されます。対話的な使用において、選択中のウィンドウがミニバッファウィンドウである場合、この関数は代わりに別のウィンドウを使用しようとします。選択中のウィンドウがそのバッファ専用である場合は、次に説明するオプション switch-to-buffer-in-dedicated-window を使用して処理を続行できます。

ユーザーオプション: switch-to-buffer-in-dedicated-window

このオプションが nil 以外の場合、対話的に呼び出された際に switch-to-buffer の実行が可能となり、選択されたウィンドウはそのバッファに厳密に割り当てられます。

以下の値が適用されます:

nil

切り替えを禁止し、非対話的利用時と同様にエラーを通知します。

prompt

切り替えを許可するかどうかをユーザーに確認する。

pop

pop-to-buffer を呼び出して処理を続行します。

t

選択したウィンドウを非専用としてマークし、処理を続行する。

このオプションは、switch-to-buffer の非対話型通話には影響しません。

デフォルトでは、switch-to-buffer は window-point を保持しようとします。この動作は、以下のオプションで調整できます。

ユーザーオプション: switch-to-buffer-preserve-window-point

この変数が nil の場合、switch-to-buffer は buffer-or-name で指定されたバッファを、そのバッファの point の位置に表示します。この変数が already-displayed の場合、そのバッファが現在、可視またはアイコン化されたフレーム上の他のウィンドウに表示されている限り、選択中のウィンドウにおける直前の位置にバッファを表示しようとします。この変数が t の場合、switch-to-buffer は無条件に、選択中のウィンドウにおける直前の位置にバッファを表示しようとします。

バッファが既に選択中のウィンドウに表示されているか、あるいはこれまで一度も表示されたことがない場合、または switch-to-buffer がバッファを表示するために pop-to-buffer を呼び出す場合、この変数は無視されます。

ユーザーオプション: switch-to-buffer-obey-display-actions

この変数が nil 以外の場合、switch-to-buffer は display-buffer-overriding-action、display-buffer-alist(バッファ表示用アクション関数 を参照)、およびその他のバッファ表示関連変数(バッファ表示用アクションアリスト を参照)で指定された表示アクションに従います。

次の2つのコマンドは、記載されている機能を除けば、switch-to-bufferと同様です。

コマンド: switch-to-buffer-other-window buffer-or-name &optional norecord

この関数は、buffer-or-name で指定されたバッファを、選択中のウィンドウとは別のウィンドウに表示します。内部的には関数 pop-to-buffer を使用しています(後述)。

選択したウィンドウに既に指定されたバッファが表示されている場合はそのまま表示され続けますが、それでも別のウィンドウが見つかり、そこにも表示されます。

buffer-or-name および norecord 引数は、switch-to-buffer と同様の意味を持ちます。

コマンド: switch-to-buffer-other-frame buffer-or-name &optional norecord

この関数は、buffer-or-name で指定されたバッファを新しいフレームに表示します。内部的には関数 pop-to-buffer を使用しています(後述)。

指定したバッファが既に別のウィンドウ(現在の端末の任意のフレーム内)に表示されている場合、新しいフレームを作成する代わりにそのウィンドウに切り替わります。ただし、この際に選択中のウィンドウが使用されることはありません。

buffer-or-name および norecord 引数は、switch-to-buffer と同様の意味を持ちます。

The above commands use the function pop-to-buffer, which flexibly displays a buffer in some window and selects that window for editing. In turn, pop-to-buffer uses display-buffer for displaying the buffer. Hence, all the variables affecting display-buffer will affect it as well. See Choosing a Window for Displaying a Buffer, for the documentation of display-buffer.

コマンド: pop-to-buffer buffer-or-name &optional action norecord

この関数は buffer-or-name を現在のバッファとし、それを何らかのウィンドウ(できれば現在選択されているウィンドウではないもの)に表示します。その後、表示中のウィンドウを選択します。そのウィンドウが別のグラフィカルフレームにある場合は、可能であればそのフレームに入力フォーカスが与えられます(入力フォーカスを参照)。

buffer-or-name が nil である場合、other-buffer が返すバッファがデフォルトとなります(バッファリスト を参照)。buffer-or-name が既存のどのバッファの名前でもない文字列である場合、この関数はその名前で新しいバッファを作成します。新しいバッファのメジャーモードは変数 major-mode によって決定されます(メジャーモード を参照)。いずれの場合も、表示に適したウィンドウが見つからなかったとしても、そのバッファがカレント状態となり、返されます。

action が nil 以外の場合、それは display-buffer に渡す表示アクションであるべきです(バッファ表示用のウィンドウの選択 を参照)。あるいは、nil でもリストでもない値は、たとえバッファがすでに選択済みのウィンドウに表示されていても、選択済み以外のウィンドウにポップすることを意味します。

switch-to-bufferと同様に、この関数はnorecordがnon-nilでない限り、バッファリストを更新します。