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

28.10 バッファの破棄

バッファの破棄を行うと、その名称がEmacsに知られなくなり、そのバッファが占有していたメモリ領域を他の用途に利用できるようになります。

破棄されたバッファのバッファオブジェクトは、何らかの参照がある限り存在し続けますが、カレントに設定したり表示したりできないよう特別にマークされています。ただし、破棄されたバッファはその識別情報を保持します。2つの異なるバッファを破棄した場合、いずれも破棄された状態ではありますが、eq に従って別々のバッファとして残ります。

ウィンドウ内でカレントまたは表示されているバッファをキルすると、Emacsは自動的に別のバッファを選択または表示します。つまり、バッファをキルすることでカレントバッファが変更される可能性があります。したがって、バッファをキルする際は、カレントバッファの変更に伴う注意事項にも留意してください(キルするバッファがカレントではないことが分かっている場合を除きます)。カレントバッファを参照してください。

1つ以上の間接バッファ(間接バッファを参照)のベースバッファであるバッファを破棄すると、それらの間接バッファも自動的に破棄されます。

バッファの buffer-name は、バッファがキルされている場合に限り nil となります。キルされていないバッファは ライブ バッファと呼ばれます。バッファがライブかキルされているかを確認するには、関数 buffer-live-p を使用してください(後述)。

コマンド: kill-buffer &optional buffer-or-name

この関数はバッファ buffer-or-name を破棄し、そのメモリをすべて他の用途に解放するか、オペレーティングシステムに返却します。buffer-or-name が nil であるか、あるいは省略されている場合は、現在のバッファを破棄します。

このバッファをprocess-bufferとして持つプロセスにはSIGHUP(ハングアップ)シグナルが送信され、通常これによりプロセスは終了します。プロセスへのシグナル送信を参照してください。

バッファがファイルを参照しており、未保存の変更が含まれている場合、kill-buffer はバッファが破棄される前にユーザーに確認を求めます。これは、対話的に呼び出されていない場合でも行われます。確認要求を防ぐには、kill-buffer を呼び出す前に変更済みフラグをクリアしてください。バッファの変更を参照してください。

この関数は、終了対象のバッファを現在表示しているすべてのウィンドウを閉じるため、replace-buffer-in-windowsを呼び出します。

既に消滅しているバッファを破棄しても効果はありません。

この関数は、実際にバッファを破棄した場合に 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
変数: kill-buffer-query-functions

未保存の変更を確認する前に、kill-buffer はリスト kill-buffer-query-functions 内の関数を、出現順に引数なしで呼び出します。呼び出し時に破棄されるバッファは、現在のバッファです。この機能の意図は、これらの関数がユーザーに確認を求めることにあります。いずれかの関数が nil を返した場合、kill-buffer はバッファの存続を可能にします。

このフックは、get-buffer-create または generate-new-buffer が nil 以外の引数 inhibit-buffer-hooks を用いて作成した内部バッファや一時バッファに対しては実行されません。

変数: kill-buffer-hook

これは、kill-buffer が尋ねる予定のすべての質問を行った後、実際にバッファを破棄する直前に実行される通常のフックです。破棄対象となるバッファは、フック関数が実行される時点でのものです。Hooks を参照してください。この変数は永続的なローカル変数であるため、メジャーモードを変更してもそのローカルバインディングがクリアされることはありません。

このフックは、get-buffer-create または generate-new-buffer が nil 以外の引数 inhibit-buffer-hooks を用いて作成した内部バッファや一時バッファに対しては実行されません。

ユーザーオプション: buffer-offer-save

この変数が特定のバッファにおいて nil 以外である場合、save-buffers-kill-emacs はファイル参照バッファの保存を提案するのと同様に、そのバッファの保存も提案します。save-some-buffers を呼び出し、第2のオプション引数に t を指定した場合も、同様にバッファの保存を提案します。最後に、この変数にシンボル always が設定されている場合、save-buffers-kill-emacs と save-some-buffers の両方が常に保存を提案します。save-some-buffers の定義 を参照してください。変数 buffer-offer-save は、何らかの理由で設定されると、自動的にバッファローカルになります。バッファローカル変数 を参照してください。

変数: buffer-save-without-query

この変数が特定のバッファにおいて nil 以外である場合、save-buffers-kill-emacs と save-some-buffers は(変更があった場合に)ユーザーに確認することなくこのバッファを保存します。この変数は、何らかの理由で設定されると、自動的にバッファローカルになります。

関数: buffer-live-p object

この関数は、object がライブバッファ(破棄されていないバッファ)であれば t を、それ以外の場合は nil を返します。