コマンドが display-buffer
を使用してバッファを画面に表示した後、ユーザーはそれを非表示にし、Emacs ディスプレイの以前の状態に戻したい場合があります。これを ウィンドウを閉じる と呼びます。これを行うには、display-buffer で使用されているウィンドウが選択中のウィンドウである状態で、quit-window を呼び出します。
ディスプレイの以前の構成を復元する適切な方法は、現在バッファが表示されているウィンドウに対してどのような操作が行われたかによって異なります。そのウィンドウを削除するか、フレームを削除するか、あるいは単にそのウィンドウに別のバッファを表示させるのが正解かもしれません。一つの厄介な点は、バッファを表示させた後にユーザーがウィンドウ構成を変更している可能性があり、ユーザーが明示的に要求した変更を取り消すことは望ましくないということです。
quit-window が正しく動作するように、display-buffer はウィンドウの quit-restore パラメータに、自身が行った処理に関する情報を保存します(ウィンドウパラメータ を参照)。
このコマンドは window を終了させ、そのバッファを埋め込みます。(quit-window-kill-buffer
の条件に従い、バッファを破棄することも可能です。詳細は後述します。)引数 window
はアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。プレフィックス引数 kill が nil
以外の場合、バッファを埋め込みではなく破棄します。
関数 quit-window はまず quit-window-hook を実行します。次に、後述する関数 quit-restore-window を呼び出し、そこで実際の処理が行われます。
以下のオプションは、引数 kill が nil
である場合に、window のバッファを破棄するか埋めるかを quit-window に指示します。
This variable controls whether quit-window kills
the buffer of its window argument. If the value is
nil (the default) quit-window will kill window’s buffer only if the kill argument is non-nil. If
this is t, quit-window
will try to kill window’s buffer regardless of
the value of the kill argument. Otherwise, this
should be a list of major modes; quit-window will
kill the buffer of window regardless of the value of
kill if that buffer’s major mode is either a
member of this list or is derived from a member of this list. In any other
case, quit-window will kill the buffer only if
kill is non-nil and bury it
otherwise.
quit-windowの代わりにquit-restore-windowを呼び出すことで、より細かく制御できます。
この関数は、終了後の window とそのバッファを処理します。オプション引数 window はアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。この関数は
window の quit-restore
パラメータを考慮します。
オプション引数 bury-or-kill は、window のバッファの扱い方を指定します。以下の値が指定可能です。
nilこれは、バッファを特に特別な方法で扱わないことを意味します。その結果、window
が削除されていない場合、switch-to-prev-buffer
を呼び出すと通常は再度バッファが表示されます。
appendつまり、window が削除されない場合、そのバッファは window の以前のバッファリストの末尾に移動されるため(ウィンドウ履歴 を参照)、今後 switch-to-prev-buffer
が呼び出された際にそこへ切り替わる可能性が低くなります。また、バッファはフレームのバッファリストの末尾に移動されます(バッファリスト を参照)。
buryつまり、window が削除されない場合、そのバッファは window
の以前のバッファリストから削除されます。また、バッファはフレームのバッファリストの末尾に移動されます。これは、バッファを破棄する以外に、switch-to-prev-buffer が再びこのバッファに切り替わるのを防ぐ最も確実な方法です。
killこれはwindowのバッファを破壊することを意味します。
killingこれはkillと同様に扱われますが、windowのバッファが別の箇所で破棄されることを前提としています。この値はreplace-buffer-in-windowsおよびquit-windows-onで使用されます。
buryingこれはburyと同様に扱われますが、windowのバッファが別の場所に格納されることを前提としています。この値はquit-windows-onで使用されます。
引数 bury-or-kill はまた、window
が削除されるべき場合で、かつそれが自身のフレーム上の唯一のウィンドウであり、さらにそのフレームの端末上に他のフレームが存在するときに、window のフレームをどう扱うかも指定します。bury-or-kill が kill
と等しい場合は、そのフレームを削除することを意味します。そうでない場合、フレームの処遇は、そのフレームを唯一の引数として frame-auto-hide-function(後述)を呼び出すことで決定されます。
ウィンドウの quit-restore および quit-restore-prev パラメータ(ウィンドウパラメータ を参照)は、quit-restore-window が window
引数を処理する過程を制御します。このようなパラメータが存在しないか、あるいは nil
である場合、通常は split-window-below や split-window-right のようなコマンドによってウィンドウが作成されたことを意味し(The GNU Emacs Manual の Split
Window を参照)、quit-restore-window
はそのウィンドウが専用のバッファに割り当てられていた場合にのみ、そのウィンドウを削除します。
nil 以外の場合、そのようなパラメータはいずれも4つの要素からなるリストとなります:
(method obuffer owindow this-buffer)
最初の要素 method は、window、frame、same、other の4つの記号のうちの1つです。frame と
window は window
の削除方法を制御し、same と other
はその中に別のバッファを表示することを制御します。
具体的には、windowはウィンドウがdisplay-bufferによって特別に作成されたことを、frameは個別のフレームが作成されたことを、sameはウィンドウがこのバッファのみを表示してきたことを、otherはウィンドウが以前に別のバッファを表示していたことをそれぞれ示します。
2番目の要素 obuffer は、記号 window
または frame のいずれか、あるいは次のような形式のリストです。
(prev-buffer prev-window-start prev-window-point height)
これには、以前に window でどのバッファが表示されていたか、その時点での当該バッファのウィンドウ開始位置(ウィンドウの開始・終了位置 を参照)およびウィンドウポイント(ウィンドウとポイント を参照)の位置、そしてその時点での window の高さが記載されています。window を終了する際に prev-buffer がまだアクティブな場合、ウィンドウを終了することで window が再利用され、prev-buffer が表示されることがあります。
3番目の要素 owindow は、表示が行われる直前に選択されていたウィンドウです。終了処理によって window が削除された場合、owindow の選択を試みます。
4番目の要素 this-buffer は、quit-restore パラメータで表示が設定されているバッファです。window
を終了すると、そのパラメータに格納されている情報が使用されるのは、引き続きそのバッファが表示されている場合に限られます。
quit-restore-window は、(1) method が window または frame のいずれかであり、(2) ウィンドウに過去に表示されたバッファの履歴がなく、(3) this-buffer が window
で現在表示されているバッファと等しい場合に、自身の window を削除しようとします。window がアトミックウィンドウ(Atomic Windows
を参照)の一部である場合は、代わりにそのアトミックウィンドウのルートを削除しようとします。いずれの場合も、window が削除できないときにエラーを通知しないよう配慮しています。
obuffer がリストであり、prev-buffer がまだ有効な場合、終了すると obuffer の残りの要素に応じて window に prev-buffer が表示されます。これには、this-buffer を表示するために一時的にリサイズされていた場合に、ウィンドウを height にリサイズすることも含まれます。
そうでない場合、window が以前に他のバッファの表示に使用されていたなら(ウィンドウ履歴 を参照)、その履歴の中で最も新しいバッファが表示されます。
概念的には、quit-restore
パラメータは特定のウィンドウにおける最初のバッファ表示操作を取り消すために使用されます。quit-restore-prev
パラメータは、特定のウィンドウにおける一連のバッファ表示操作のうち、最後の操作を取り消すために使用されます。その間に当該ウィンドウで発生した任意のバッファ表示操作は、以前にそのウィンドウに表示されたバッファを表示することで取り消されます。
display-buffer は、自身が作成したウィンドウ、または nil quit-restore
以外のパラメータを持たないウィンドウにおいて、そのウィンドウが使用する quit-restore
パラメータを設定します。ウィンドウに既に quit-restore
パラメータが存在する場合、display-buffer は method 要素が same または other である quit-restore-prev
パラメータを追加します。いずれの場合も、ウィンドウに既に quit-restore-prev または
quit-restore パラメータが存在する場合は、そのパラメータの内容を更新することがあります。
quit-restore-window
はまず、そのウィンドウに対して代わりにどのバッファを表示するかを指定する適切な quit-restore-prev
パラメータを探そうとします。見つからない場合は、ウィンドウを削除するか、あるいは別のバッファを表示するための適切な quit-restore パラメータを探します。
これらのパラメータのいずれかを使用すると、quit-restore-window はそれを
nil
にリセットします。使用されなかったパラメータはそのまま保持されます。また、これらのパラメータのいずれかが、prev-buffer で指定されたバッファまたは this-buffer で指定されたバッファのいずれか、終了予定のバッファを参照している場合、replace-buffer-in-windows によってもリセットされます(バッファとウィンドウ を参照)。
これらのパラメータに対するすべての操作は、以下の不変条件を維持するものとする。すなわち、ウィンドウがnil quit-restore-prev以外のパラメータを持つ場合、nil quit-restore以外のパラメータも持つ。
以下のオプションにより、quit-restore-window
はより積極的にウィンドウを削除できるようになります。
このオプションが nil の場合、ウィンドウが display-buffer によって作成されていない限り、quit-restore-window は常に switch-to-prev-buffer を呼び出します。これが t の場合、quit-restore-window
はそのウィンドウで以前に表示されていたバッファのみに切り替えるよう最大限に努めます。これがシンボル skip-first
の場合、ウィンドウに少なくとも2つの以前のバッファが存在する場合に限り、以前のバッファに切り替えます。
いずれの場合も、quit-restore-window
が前のバッファに切り替わらないときは、代わりにウィンドウ(および場合によってはそのフレーム)を削除しようとします。また、ウィンドウが専用である場合、quit-restore-window も通常はそのウィンドウ内で前のバッファに切り替わることはありません。
以下のオプションは、ウィンドウを終了する際に、1つのウィンドウを含むフレームに対して適切な処理を行う関数を指定します。
このオプションで指定される関数は、フレームを自動的に非表示にするために呼び出されます。この関数には、1つの引数—フレーム—が渡されます。
ここで指定されている関数は、選択中のウィンドウが専用となり、bury するバッファが表示される際に bury-buffer(バッファリスト
を参照)によって呼び出されます。また、終了するウィンドウのフレームがそのウィンドウのバッファを表示するために特別に作成されており、かつバッファが破棄されない場合にも、quit-restore-window(上記参照)によって呼び出されます。
デフォルトでは iconify-frame が呼び出されます(フレームの可視性 を参照)。あるいは、フレームを表示から削除するには
delete-frame(フレームの削除 を参照)、フレームを不可視にするには make-frame-invisible、フレームをそのままにするには ignore、またはフレームを唯一の引数として受け取れるその他の関数を指定することもできます。
なお、このオプションで指定される関数は、指定されたフレームにライブウィンドウが1つだけ含まれ、かつ同一端末上に少なくとももう1つのフレームが存在する場合にのみ呼び出されます。
特定のフレームにおいて、ここで指定された値は、そのフレームの auto-hide-function
フレームパラメータによって上書きされる場合があります(フレーム相互作用パラメータを参照)。