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


29.16 ウィンドウのquit

コマンドがスクリーンにバッファーを配置するためにdisplay-bufferを使用した後に、ユーザーはそれを隠してEmacsディスプレーの以前の構成をリターンすることを選択できます。わたしたちはこれをウィンドウのquit(quitting the window)と呼びます。これを行うにはdisplay-bufferが使用中のウィンドウが選択されたウィンドウである間にquit-windowを呼び出してください。

以前の表示の構成を正しくリストアする方法は、そのときバッファーが表示されているウィンドウにたいして何が行われたのかに依存します。ウィンドウの削除が正しいかもしれないし、フレームの削除やそのウィンドウに別のバッファーを単に表示することが正しいことなのかもしれません。難しいのは、そのバッファーを表示するという行為の後でユーザーがウィンドウ構成を変更しているかもしれず、ユーザーが明示的に要求したその変更をアンドゥするのは望ましくないということも1つの理由です。

quit-windowが正しく事を行うことができるように、display-bufferはそのウィンドウのquit-restoreパラメーター(Window Parametersを参照)に行ったことに関する情報を保存します。

Command: quit-window &optional kill window

このコマンドはwindowをquitしてそのバッファーをバリーする。引数windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。プレフィックス引数killが非nilならバッファーをバリーするかわりにkillする。

まず関数quit-windowquit-window-hookを実行する。その後にウィンドウとそのバッファーを処理するために、厄介な処理をこなす関数quit-restore-window (次に説明)を呼び出す。

かわりにquit-restore-windowを呼び出すことで、より多くの制御を得ることができます。

Function: quit-restore-window &optional window bury-or-kill

この関数はwindowのquit後にウィンドウとウィンドウのバッファーを処理する。オプション引数windowは生きたウィンドウでなければならず、デフォルトは選択されたウィンドウ。この関数はwindowquit-restoreパラメーターを考慮する。

オプション引数bury-or-killにはwindowを処理する方法を指定し、以下の値が意味をもつ。

nil

これはバッファーを特別な方法で処理しないことを意味する。その結果としてwindowが削除されない場合には、switch-to-prev-bufferの呼び出しにより通常はそのバッファーが再び表示されるだろう。

append

これはwindowが削除されない場合には、そのバッファーをwindowの前のバッファーのリスト(Window Historyを参照)の最後に移動するので、将来のswitch-to-prev-buffer呼び出しでこのバッファーには切り替わることは少なくなる。これはそのバッファーをフレームのバッファーリストの最後への移動も行う(Buffer Listを参照)。

bury

これはwindowが削除されない場合には、そのバッファーをwindowの前のバッファーリストから削除する。これはそのバッファーをフレームのバッファーリストの最後への移動も行う。これはswitch-to-prev-bufferがそのバッファーをkillすることなく、このバッファーに再び切り替えさせないようにするもっとも信頼できる方法である。

kill

これはwindowのバッファーをkillすることを意味する。

引数bury-or-killwindowがそのフレームで唯一のウィンドウであり、かつそのフレームの端末上に他のフレームが存在する場合には、windowを削除するべき際にはそのフレームに何を行うかも指定する。bury-or-killkillはフレームの削除を意味する。それ以外ではフレームの処遇はそのフレームを単一の引数とするframe-auto-hide-function (以下参照)の呼び出しにより決定される。

この関数はウィンドウを削除しない場合には、windowquit-restoreパラメーターに常にnilをセットする。

ウィンドウwindowquit-restoreパラメーター(Window Parametersを参照)はnil、あるいは4要素のリストである必要があります:

(method obuffer owindow this-buffer)

1つ目の要素methodwindowframesameotherの4つのシンボルのうちのいずれかです。framewindowwindowを削除する方法、sameotherwindowへの別バッファーの表示を制御します。

具体的には、windowはそのウィンドウが特にdisplay-bufferによって作成されたこと、frameは別のフレームが作成されたこと、sameはこのウィンドウにはそのバッファーしか表示されていないこと、otherは以前は別のバッファーを表示していたことを意味します。

2つ目の要素obufferwindowframeのシンボルのいずれか、あるいは以下の形式のリストです

(prev-buffer prev-window-start prev-window-point height)

これはそれぞれ以前windowにどのバッファーが表示されていたか、その時点でのバッファーのウィンドウ開始(Window Start and Endを参照)とウィンドウポイント(Window Pointを参照)の位置、そしてwindowのその時点での高さです。windowのquit時にまだprev-bufferが生きていれば、ウィンドウのquitによってprev-bufferの表示にwindowが再利用されるかもしれません。

3つ目の要素owindowは表示が行われる直前に選択されていたウィンドウです。quitによってwindowが削除された場合にはowindowの選択を試みます。

4つ目の要素this-bufferは表示によってquit-restoreパラメーターをセットしたバッファーです。windowのquitではまだそのバッファーを表示している場合のみウィンドウを削除します。

windowのquitにおいては、(1) methodwindowframeのいずれかで、(2) そのウィンドウに以前表示されていたバッファー履歴がなく、(3) windowにカレントで表示されているバッファーがthis-bufferと等しい場合のみウィンドウの削除を試みます。windowがアトミックウィンドウ(Atomic Windowsを参照)の一部の場合には、quitはかわりにそのアトミックウィンドウのルートウィンドウの削除を試みます。いずれのケースにおいてもwindowが削除できない場合は、エラーのシグナルの回避を試みます。

obufferがリストでprev-bufferがまだ生きていたら、quitすることによってobufferの残りの要素に応じたwindowprev-bufferが表示されます。これにはthis-bufferを表示するために一時的にリサイズされていた場合にウィンドウをheightにリサイズすることが含まれます。

それ以外の場合には、以前に別のバッファーの表示にwindowが使用されていれば(Window Historyを参照)、その履歴中でもっとも最近のバッファーが表示される。

以下のオプションはウィンドウを1つ含むフレームで、そのウィンドウをquitする際に正しく事を行うための関数を指定します。

User Option: frame-auto-hide-function

このオプションで指定された関数は自動的にフレームを隠すために呼び出される。この関数はフレームを唯一の引数として呼び出される。

ここで指定される関数は選択されたウィンドウが専用(dedicated)であり、かつバリーされるバッファーを表示しているときにbury-buffer (Buffer Listを参照)から呼び出される。またquitされるウィンドウのフレームがそのウィンドウのバッファーを表示するために特別に作成されたフレームで、かつそのバッファーがkillされないときにもquit-restore-window (上記)から呼び出される。

デフォルトではiconify-frame (Visibility of Framesを参照)を呼び出す。かわりにフレームをディスプレイから削除するdelete-frame (Deleting Framesを参照)、フレームを不可視にするmake-frame-invisible、フレームを変更せずに残すignore、またはフレームを唯一の引数とする任意の関数のいずれかを指定できる。

このオプションで指定された関数は指定されたフレームが生きたウィンドウただ1つを含み、かつ同一端末上に少なくとも1つ他のフレームが存在する場合のみ呼び出されることに注意。

特定のフレームにたいしてここで指定した値は、そのフレームのフレームパラメーターauto-hide-functionでオーバーライドされるかもしれない(Frame Interaction Parametersを参照)。