Next: , Previous: Creating Buffers, Up: Buffers


26.10 バッファの削除

バッファを削除するとは、Emacsに当該バッファの名前を忘れさせ、 それが使っていた場所を他の目的に使えるようにすることです。

削除されたバッファを表すバッファオブジェクトは、 それを指すものが存在する限り存在し続けますが、 それをカレントバッファにしたり表示できないように特別な印が付いています。 削除されたバッファの識別子は残っているので、 異なる2つのバッファを削除しても、 eqに関する限りそれらは区別できるのです。

カレントバッファやウィンドウに表示しているバッファを削除すると、 そのかわりにEmacsは別のバッファを選択したり表示します。 つまり、バッファを削除すると一般にはカレントバッファが 替わりうることを意味します。 したがって、バッファを削除するときには、 (削除するバッファがカレントバッファではないことがわかっていない限り) カレントバッファを替える可能性についてあらかじめ注意しておく必要があります。 See Current Buffer

複数の間接バッファの基底バッファであるバッファを削除すると、 間接バッファも自動的に削除されます。

削除されたバッファのbuffer-namenilです。 これを使えばバッファが削除されているかどうか調べられます。

     (defun buffer-killed-p (buffer)
       "Return t if BUFFER is killed."
       (not (buffer-name buffer)))
— コマンド: kill-buffer buffer-or-name

この関数はバッファbuffer-or-nameを削除し、 当該バッファが使用していたすべてのメモリを他の目的に使えるように解放したり、 オペレーティングシステムに返すために解放する。 この関数はnilを返す。

当該バッファをprocess-bufferとしているすべてのプロセスに シグナルSIGHUPを送る。 このシグナルは、通常、プロセスを終了させる。 (SIGHUPの基本的な意味は、接続回線が切断されたである。) see Deleting Processes

当該バッファがファイルを訪問していて、かつ、未保存の変更があれば、 kill-bufferは当該バッファを削除するまえにユーザーに確認をとる。 確認をとらないようにするには、kill-bufferを呼び出すまえに バッファの変更フラグをクリアしておく。 see Buffer Modification

削除済みのバッファを削除してもなんの効果もない。

          (kill-buffer "foo.unchanged")
                nil
          (kill-buffer "foo.changed")
          
          ---------- Buffer: Minibuffer ----------
          Buffer foo.changed modified; kill anyway? (yes or no) yes
          ---------- Buffer: Minibuffer ----------
          
                nil
— Variable: kill-buffer-query-functions

未保存の変更を確認したあとで、kill-bufferは、 リストkill-buffer-query-functionsの関数を現れる順に 引数なしで呼び出す。 これらの関数が呼び出されるときには、 削除対象のバッファがカレントバッファである。 これらの関数でさまざまな非標準的な理由から ユーザーの確認をとることが目的である。 いずれかがnilを返すと、kill-bufferはバッファを削除しない。

— Variable: kill-buffer-hook

これは、kill-bufferが問い合わせをすべて完了し バッファを実際に削除する直前に実行されるノーマルフックである。 フック関数を実行するときには、削除対象のバッファがカレントバッファである。 see Hooks

— Variable: buffer-offer-save

この変数が特定のバッファでnil以外であると、 save-buffers-kill-emacssave-some-buffersに対して ファイルを訪問しているバッファと同様に 当該バッファを保存する機会を与えるように指示する。 変数buffer-offer-saveに 設定すると自動的にバッファローカルになる。