Next: , Previous: , Up: Windows   [Contents][Index]


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

このセクションでは、あるウィンドウ内で特定のバッファーにスイッチするための高レベルな関数について説明します。“バッファーをスイッチする”とは一般的に、(1)そのバッファーをあるウィンドウに表示して、(2)そのウィンドウを選択されたウィンドウとし(かつそのフレームを選択されたフレームとし)、(3)そのバッファーウィンドウカレントバッファーにすることを意味します。

Lispプログラムがアクセスや変更できるように、バッファーを一時的にカレントにするためにこれらの関数を使用しないでください。これらはウィンドウヒストリー(Window Historyを参照)の変更のような副作用をもつので、そのような方法での使用はユーザーを驚かせることになるでしょう。バッファーをLispで変更するためにカレントにしたければwith-current-buffersave-current-bufferset-bufferを使用してください。Current Bufferを参照してください。

Command: switch-to-buffer buffer-or-name &optional norecord force-same-window

このコマンドは選択されたウィンドウ内でbuffer-or-nameを表示して、それをカレントバッファーにしようと試みる。これはよくインタラクティブ(C-x bのバインディングで)に使用され、同様にLispプログラムでも使用される。リターン値はスイッチしたバッファー。

buffer-or-namenilの場合のデフォルトはother-bufferによりリターンされるバッファー(Buffer Listを参照)。buffer-or-nameが既存のバッファーの名前でない文字列なら、この関数はその名前で新たにバッファーを作成する。新たなバッファーのメジャーモードは変数major-modeにより決定される(Major Modesを参照)。

通常は指定されたバッファーはバッファーリスト — グローバルバッファーリストと選択されたフレームのバッファーリストの両方の先頭に置かれる(Buffer Listを参照)。しかしオプション引数norecordが非nilなら、これは行われない。

switch-to-bufferが、選択されたウィンドウ内にバッファーを表示するのが不可能なことが時折ある。これは、選択されたウィンドウがミニバッファーウィンドウの場合や、選択されたウィンドウがそのバッファーにたいして特に専用(strongly dedicated)な場合に発生する(Dedicated Windowsを参照)。この場合、このコマンドはpop-to-buffer(以下参照)を呼び出すことにより、通常は何か他のウィンドウにそのバッファーの表示を試みる。しかし、オプション引数が非nilなら、かわりにエラーをシグナルする。

デフォルトではswitch-to-bufferはバッファーのpoint位置でバッファーを表示します。この振る舞いは以下のオプションを使用して調整可能です。

User Option: switch-to-buffer-preserve-window-point

この変数がnilなら、switch-to-bufferbuffer-or-nameにより指定されたバッファーを、そのバッファーのpoint位置で表示する。この変数がalready-displayedなら、そのバッファーが任意の可視またはアイコン化されたフレーム上の他のウィンドウで表示されていれば、選択されたウィンドウ内の以前の位置でバッファーの表示を試みる。この変数がtなら、switch-to-bufferは選択されたウィンドウ内の以前の位置でそのバッファーを表示しようと試みる。

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

以下の2つのコマンドは、説明している機能以外はswitch-to-bufferと類似しています。

Command: switch-to-buffer-other-window buffer-or-name &optional norecord

この関数はbuffer-or-nameで指定されたバッファーを、選択されたウィンドウ以外の別のウィンドウに表示する。これは関数pop-to-buffer(以下参照)を内部で使用する。

選択されたウィンドウが指定されたバッファーをすでに表示していれば表示を続けるが、見つかった他のウィンドウも同様にそのバッファーを表示する。

引数buffer-or-namenorecordswitch-to-bufferの場合と同じ意味をもつ。

Command: switch-to-buffer-other-frame buffer-or-name &optional norecord

この関数はbuffer-or-nameで指定されたバッファーを新たなフレームに表示する。これは関数pop-to-buffer (以下参照)を内部で使用する。

指定されたバッファーがすでにカレント端末上の任意のフレームの他のウィンドウに表示されている場合には、フレームを新たに作成せずにそのウィンドウに切り替える。しかしこれを行うために選択されたウィンドウを使用することは決してない。

引数buffer-or-namenorecordswitch-to-bufferの場合と同じ意味をもつ。

上述したコマンドは任意のウィンドウにバッファーを柔軟に表示して、編集用にそのウィンドウを選択する関数pop-to-bufferを使用しています。次にpop-to-bufferはバッファーの表示にdisplay-bufferを使用します。したがってdisplay-bufferに影響する変数も同様に影響します。display-bufferのドキュメントについてはChoosing Windowを参照してください。

Command: pop-to-buffer buffer-or-name &optional action norecord

この関数は、buffer-or-nameをカレントバッファーにして、なるべく前に選択されていたウィンドウではないウィンドウにそれを表示する。そしてその後に、表示しているウィンドウを選択する。そのウィンドウが別のグラフィカルなフレーム上にある場合は、可能ならそのフレームが入力フォーカスを与えられる(Input Focusを参照)。リターン値は、切り替えたバッファーである。

buffer-or-namenilの場合のデフォルトはother-bufferによりリターンされるバッファー(Buffer Listを参照)。buffer-or-nameが既存のバッファーの名前でない文字列なら、この関数はその名前で新たにバッファーを作成する。新たなバッファーのメジャーモードは変数major-modeにより決定される(Major Modesを参照)。

actionが非nilなら、それはdisplay-bufferに渡すディスプレイアクション(display action)であること(Choosing Windowを参照)。非nilか非リスト値なら、たとえそのバッファーがすでに選択されたウィンドウに表示されていたとしても、選択されたウィンドウではなく別のウィンドウをポップ(pop)することを意味する。

この関数はswitch-to-bufferと同じように、norecordnilならバッファーリストを更新する。