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

28.11 間接バッファ

間接バッファは、別のバッファのテキストを共有しており、そのバッファは間接バッファのベースバッファと呼ばれます。ある意味で、これはバッファにおけるファイル間のシンボリックリンクに相当するものです。ベースバッファ自体が間接バッファであるとは限りません。

間接バッファのテキストは、常に基となるバッファのテキストと同一であり、いずれか一方を編集して加えた変更は、もう一方にも即座に反映されます。これには、テキストのプロパティだけでなく、文字自体も含まれます。

それ以外のあらゆる点において、間接バッファとそのベースバッファは完全に分離しています。名称が異なり、pointの値、ナローイング、マーカーおよびオーバーレイがそれぞれ独立しており(ただし、いずれかのバッファでテキストを挿入または削除すると、両方のマーカーとオーバーレイが再配置されます)、メジャーモードも独立しており、バッファローカル変数の束縛も独立しています。

間接バッファはファイルにアクセスできませんが、そのベースバッファは可能です。間接バッファを保存しようとすると、実際にはベースバッファが保存されます。

間接バッファを破棄しても、そのベースバッファには影響しません。ベースバッファを破棄すると、その間接バッファは二度とカレントバッファになれなくなるため、実質的に破棄されたことになります。

コマンド: make-indirect-buffer base-buffer name &optional clone inhibit-buffer-hooks

これにより、ベースバッファが base-buffer である name という名前の間接バッファが生成され、返されます。引数 base-buffer には、ライブバッファまたは既存バッファの名前(文字列)を指定できます。name が既存バッファの名前である場合、エラーが通知されます。

clone が nil でない場合、間接バッファは本来、メジャーモード、マイナーモード、バッファローカル変数などの base-buffer の状態を共有します。clone が省略されているか、あるいは nil の場合、間接バッファの状態は新規バッファのデフォルト状態に設定されます。

base-buffer が間接バッファである場合、そのベースバッファが新しいバッファのベースとして使用されます。さらに、clone が nil 以外である場合、初期状態は base-buffer からではなく、実際のベースバッファからコピーされます。

inhibit-buffer-hooksの意味については、バッファの作成を参照してください。

コマンド: clone-indirect-buffer newname display-flag &optional norecord

この関数は、現在のバッファのベースバッファを共有し、現在のバッファの残りの属性をコピーした新しい間接バッファを作成して返します。(現在のバッファが間接バッファでない場合は、それがベースバッファとして使用されます。)

インタラクティブ呼び出しでは常にそうであるように、display-flag が nil 以外である場合は、pop-to-buffer を呼び出して新しいバッファを表示することを意味します。norecord が nil 以外である場合は、新しいバッファをバッファリストの先頭に配置しないことを意味します。

関数: buffer-base-buffer &optional buffer

この関数は buffer のベースバッファを返します。デフォルトでは現在のバッファとなります。buffer が間接バッファでない場合、値は nil となります。それ以外の場合、値は別のバッファとなり、それが間接バッファになることはありません。