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


26.10 Killing Buffers

バッファーのkillにより、 そのバッファーの名前はEmacsにとって未知の名前となり、そのバッファーが占めていたメモリースペースは、他の用途に使用できるようになります。

バッファーに対応するバッファーオブジェクトは、それを参照するものがあればkillされても存在し続けますが、それをカレントにしたり表示することができないよう、特別にマークされます。とはいえ、killされたバッファーの同一性は保たれるので、2つの識別可能なバッファーをkillした場合、たとえ両方死んだバッファーであっても、eqによる同一性は残ります。

あるウィンドウ内においてカレント、あるいは表示されているバッファーをkillした場合、Emacsはかわりに他の何らかのバッファーを自動的に選択、または表示します。これは、バッファーのkillにより、カレントバッファーが変更されることを意味します。したがって、バッファーをkillする際は、(killされるバッファーがカレントを偶然知っていた場合を除き)カレントバッファーの変更に関しても、事前に注意を払うべきです。Current Bufferを参照してください。

1つ以上のインダイレクト バッファー(Indirect Buffersを参照) のベースとなるバッファーをkillした場合は、インダイレクトバッファーも同様に自動的にkillされます。

バッファーのbuffer-namenilの場合のみ、バッファーはkillされる。killされていないバッファーは生きた(live)バッファーと呼ばれる。あるバッファーにたいして、そのバッファーが生きているか、またはkillされているかを確認するには、buffer-live-pを使用する(下記参照)。

Command: kill-buffer &optional buffer-or-name

この関数は、バッファーbuffer-or-nameをkillして、そのバッファーのメモリーを他の用途のために開放、またはオペレーティングシステムに返却する。buffer-or-namenil、または省略された場合は、カレントバッファーをkillする。

そのバッファーをprocess-bufferとして所有するすべてのプロセスには、通常はプロセスを終了させるシグナルSIGHUP(“hangup”)が送信される。Signals to Processesを参照のこと。

バッファーがファイルをvisitしていて、かつ保存されていない変更が含まれる場合、kill-bufferはバッファーをkillする前に、ユーザーにたいして確認を求める。これは、kill-bufferがinteractiveに呼び出されていなくても、行われる。この確認要求を抑制するには、kill-bufferの呼び出し前に、変更フラグ(modified flag)をクリアーすればよい。Buffer Modificationを参照のこと。

killされるバッファーをカレントで表示しているすべてのバッファーをクリーンアップするために、この関数はreplace-buffer-in-windowsを呼び出す。

すでに死んでいるバッファーをkillしても、効果はない。

この関数は、実際にバッファーをkillした場合は、tをリターンする。ユーザーが確認で拒否を選択、またはbuffer-or-nameがすでに死んでいる場合は、nilをリターンする。

(kill-buffer "foo.unchanged")
     ⇒ t
(kill-buffer "foo.changed")

---------- Buffer: Minibuffer ----------
Buffer foo.changed modified; kill anyway? (yes or no) yes
---------- Buffer: Minibuffer ----------

     ⇒ t
Variable: kill-buffer-query-functions

保存されていない変更について確認を求める前に、kill-bufferはリストkill-buffer-query-functions内の関数を、出現順に引数なしで呼び出す。 Before confirming unsaved changes, calls the functions in the list , in order of appearance, with no arguments. それらが呼び出される際には、killされるバッファーがカレントになる。この機能は、これらの関数がユーザーに確認を求めるというアイデアが元となっている。これらの関数のいずれかがnilをリターンした場合、kill-bufferはそのバッファーの命を奪わない。

Variable: kill-buffer-hook

これは、尋ねることになっている質問をすべて終えた後、実際にバッファーをkillする直前に、kill-bufferにより実行されるノーマルフックである。この変数は永続的にローカルであり、メジャーモードの変更により、そのローカルバインディングはクリアーされない。

User Option: buffer-offer-save

特定のバッファーにおいてこの変数が非nilの場合、save-buffers-kill-emacsおよびsave-some-buffers(この関数の2つ目のオプション引数がtの場合)は、ファイルをvisitしているバッファーと同じように、そのバッファーの保存を提案する。Definition of save-some-buffersを参照のこと。何らかの理由により変数buffer-offer-saveをセットする際は、自動的にバッファーローカルになる。Buffer-Local Variablesを参照のこと。

Variable: buffer-save-without-query

特定のバッファーにおいてこの変数が非nilの場合、save-buffers-kill-emacsおよびsave-some-buffersは、(バッファーが変更されていれば)ユーザーに確認を求めることなく、そのバッファーを保存する。何らかの理由によりこの変数をセットする際は、自動的にバッファーローカルになる。

Function: buffer-live-p object

この関数は、objectが生きたバッファー(killされていないバッファー)ならt、それ以外はnilをリターンする。