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

29.16 ウィンドウ履歴

各ウィンドウは、過去に表示したバッファと、それらのバッファが削除された順序をリストに記録しています。この履歴は、例えば replace-buffer-in-windows(バッファとウィンドウを参照)や、ウィンドウを終了する際(ウィンドウの終了を参照)に使用されます。このリストはEmacsによって自動的に管理されますが、以下の関数を使用して明示的に確認したり変更したりすることができます。

関数: window-prev-buffers &optional window

この関数は、window の以前の内容を示すリストを返します。オプション引数 window にはアクティブなウィンドウを指定する必要があり、デフォルトでは選択中のウィンドウが指定されます。

各リスト要素は (buffer window-start window-pos) という形式をしており、ここで buffer は以前にウィンドウに表示されたバッファ、window-start はそのバッファが最後に表示された際のウィンドウ開始位置(ウィンドウの開始・終了位置 を参照)を示すマーカー、window-pos はそのバッファが window に最後に表示された際のウィンドウポイント位置(ウィンドウとポイント を参照)を示すマーカーです。

このリストは、先頭の要素ほど最近表示されたバッファに対応するように順序付けられており、最初の要素は通常、ウィンドウから直近に削除されたバッファに対応します。

原則として、バッファが破棄されると要素はこのリストから削除されます。ただし、稀にバッファが破棄されても要素が残存している場合があります。したがって、この関数の戻り値を処理する際は、常にバッファが生存しているかを確認することが望ましいでしょう。

関数: set-window-prev-buffers window prev-buffers

この関数は、windowの直前のバッファをprev-buffersの値に設定します。引数windowは有効なウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。引数prev-buffersは、window-prev-buffersが返すものと同じ形式のリストである必要があります。

さらに、各ウィンドウは次のバッファのリストを保持しています。これは、switch-to-prev-bufferによって再表示されるバッファのリストです(後述)。このリストは主にswitch-to-prev-bufferおよびswitch-to-next-bufferが、切り替え先のバッファを選択する際に使用されます。

関数: window-next-buffers &optional window

この関数は、switch-to-prev-buffer を介して window に最近再表示されたバッファの一覧を返します。引数 window にはライブウィンドウを、nil には(選択中のウィンドウを意味する)ウィンドウを指定する必要があります。

関数: set-window-next-buffers window next-buffers

この関数は、次のバッファリストを window から next-buffers に設定します。引数 window にはアクティブなウィンドウまたは nil(つまり選択中のウィンドウ)を指定します。引数 next-buffers にはバッファのリストを指定します。

以下のコマンドを使用すると、bury-bufferやunbury-bufferと同様に、グローバルバッファリストを順に切り替えることができます。ただし、これらはグローバルバッファリストではなく、指定されたウィンドウの履歴リストに従って切り替わります。さらに、ウィンドウ固有のウィンドウ開始位置とポイント位置を復元し、たとえ別のウィンドウで既に表示されていてもバッファを表示することがあります。特にswitch-to-prev-bufferコマンドは、replace-buffer-in-windows、bury-buffer、quit-windowによって、ウィンドウ用の代替バッファを探す際に使用されます。

コマンド: switch-to-prev-buffer &optional window bury-or-kill

このコマンドは、直前のバッファを window に表示します。引数 window にはライブウィンドウを、nil には(選択中の)ウィンドウを指定します。オプション引数 bury-or-kill が nil 以外である場合、現在 window に表示されているバッファが破棄または終了されようとしていることを意味し、したがって、このコマンドを再度実行した際にそのバッファに切り替わることはありません。

直前のバッファとは、通常、windowで現在表示されているバッファの前に表示されていたバッファを指します。ただし、埋もれたり破棄されたりしたバッファ、あるいは最近のswitch-to-prev-bufferの呼び出しですでに表示されたバッファは、直前のバッファとはみなされません。

このコマンドを繰り返し実行して、すでに window に表示されたすべてのバッファが表示された場合、それ以降の実行では、フレーム window が表示されているフレームのバッファリストにあるバッファが表示されます(バッファリスト を参照)。

以下に説明するオプション switch-to-prev-buffer-skip を使用すると、特定のバッファ(例えば、別のウィンドウに既に表示されているバッファ)への切り替えを抑制できます。また、window のフレームに buffer-predicate パラメータ(バッファパラメータ を参照)がある場合、その述語によって特定のバッファへの切り替えが抑制されることがあります。

コマンド: switch-to-next-buffer &optional window

このコマンドはwindowの次のバッファに切り替え、これによりwindowにおける直前のswitch-to-prev-bufferコマンドの効果を打ち消します。引数windowにはアクティブなウィンドウを指定する必要があり、デフォルトでは選択中のウィンドウが指定されます。

取り消し可能な switch-to-prev-buffer の直近の呼び出しがない場合、この関数はフレーム window が表示されているフレームのバッファリストからバッファを表示しようとします(バッファリスト を参照)。

windowのフレームにおけるオプションswitch-to-prev-buffer-skipおよびbuffer-predicate(バッファパラメータを参照)は、switch-to-prev-bufferと同様にこのコマンドに影響します。

デフォルトでは、switch-to-prev-buffer および switch-to-next-buffer は、すでに別のウィンドウで表示されているバッファに切り替えることができます。この動作を上書きするには、以下のオプションを使用できます。

ユーザーオプション: switch-to-prev-buffer-skip

この変数が nil の場合、switch-to-prev-buffer は他のウィンドウに既に表示されているものを含む、任意のバッファに切り替わることがあります。

この変数が nil 以外の場合、switch-to-prev-buffer は特定のバッファへの切り替えを行いません。以下の値が使用可能です:

  • this は、switch-to-prev-buffer が作用しているウィンドウをホストするフレームに表示されているバッファに切り替えないことを意味します。
  • visible は、表示されているいずれかのフレームにあるバッファに切り替えないことを意味します。
  • 0(数値のゼロ)は、表示されているフレームやアイコン化されたフレームにあるバッファに切り替えないことを意味します。
  • t は、いずれかのライブフレームに表示されているバッファに切り替えないことを意味します。
  • 3つの引数—switch-to-prev-bufferのwindow引数、バッファswitch-to-prev-bufferへの切り替え先、およびswitch-to-prev-bufferのbury-or-kill引数—を受け取る関数。その関数がnil以外を返す場合、switch-to-prev-bufferは第2引数で指定されたバッファへの切り替えを行わない。

コマンド switch-to-next-buffer も同様にこのオプションに従います。このオプションで関数が指定されている場合、switch-to-next-buffer はその関数を呼び出し、第3引数には常に nil が渡されます。

なお、switch-to-prev-bufferはbury-buffer、replace-buffer-in-windows、quit-restore-windowからも呼び出されるため、このオプションをカスタマイズすると、ウィンドウを終了したり、バッファが埋もれたり殺されたりした際のEmacsの動作にも影響が及ぶ可能性がある点に注意してください。

また、特定の状況下では、switch-to-prev-buffer および switch-to-next-buffer がこのオプションを無視する場合があることにも注意してください。例えば、切り替え先のバッファが1つしか残っていない場合などが該当します。

ユーザーオプション: switch-to-prev-buffer-skip-regexp

このユーザーオプションは、正規表現または正規表現のリストである必要があります。名前がこれらの正規表現のいずれかに一致するバッファは、switch-to-prev-buffer および switch-to-next-buffer によって無視されます(切り替え先のバッファが他にない場合を除きます)。