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


28.10 バッファーのkill

バッファーのkill(Killing a buffer)により、 そのバッファーの名前は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内の関数を出現順に引数なしで呼び出す。それらが呼び出される際にはkillされるバッファーがカレントになる。この機能はこれらの関数がユーザーに確認を求めるというアイデアが元となっている。これらの関数のいずれかがnilをリターンしたら、kill-bufferはそのバッファーを殺さない。

このフックは非nilinhibit-buffer-hooks引数のget-buffer-createまたはgenerate-new-bufferで作成された内部バッファーや一時バッファーにたいしては実行されない。

Variable: kill-buffer-hook

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

このフックは非nilinhibit-buffer-hooks引数のget-buffer-createまたはgenerate-new-bufferで作成された内部バッファーや一時バッファーにたいしては実行されない。

User Option: buffer-offer-save

特定のバッファーにおいてこの変数が非nilなら、あたかもファイルをvisitするバッファーにたいして提案するときのように、バッファーの保存を提案するようにsave-buffers-kill-emacsに指示する。2つ目のオプション引数をtにセットしてsave-some-buffersを呼び出せばバッファーの保存も提案する。最後にこの変数をシンボルalwaysにセットすると、save-buffers-kill-emacssave-some-buffersは常に保存を提案する。Definition of save-some-buffersを参照のこと。何らかの理由により変数buffer-offer-saveがセットされると自動的にバッファーローカルになる。Buffer-Local Variablesを参照のこと。

Variable: buffer-save-without-query

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

Function: buffer-live-p object

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