間接バッファは、別のバッファのテキストを共有しており、そのバッファは間接バッファのベースバッファと呼ばれます。ある意味では、ファイル間のシンボリックリンクに相当するバッファと言えます。
現在のバッファのツインコピーとなる間接バッファを作成する。
現在のバッファのツインコピーとなる間接バッファを作成し、別のウィンドウで選択します (clone-indirect-buffer-other-window)。
間接バッファのテキストは、常にそのベースバッファのテキストと同一であり、どちらか一方を編集して加えた変更は、もう一方にも即座に反映されます。ここでの「テキスト」には、文字とそのテキストプロパティの両方が含まれます。しかし、それ以外のあらゆる点において、間接バッファとそのベースバッファは完全に独立しています。両者は、異なる名前、異なるポイント値、異なるナローイング、異なるマーカー、異なるオーバーレイ、異なるメジャーモード、および異なるローカル変数を持つことができます。
間接バッファはファイルにアクセスできませんが、そのベースバッファは可能です。間接バッファを保存しようとすると、実際にはベースバッファを保存することで実現されます。ベースバッファを破棄すると実質的に間接バッファも破棄されますが、間接バッファを破棄してもそのベースバッファには影響しません。
間接バッファの活用方法の一つに、アウトラインを複数のビューで表示する方法があります。1つのアウトラインを複数のビューで表示するを参照してください。
間接バッファを手軽かつ迅速に作成するには、C-x 4 c (clone-indirect-buffer-other-window)
コマンドを使用します。これにより、現在のバッファをベースバッファとする間接バッファが作成され、選択されます。数値引数を指定すると間接バッファ名の入力が求められ、指定しない場合は現在のバッファ名に
‘<n>’
という接尾辞を付けたものが使用されます。
間接バッファを作成するより一般的な方法は、M-x make-indirect-buffer コマンドを使用することです。これにより、バッファ base-buffer から indirect-name という名前の間接バッファが作成され、ミニバッファを用いて両方の入力が求められます。
間接バッファを作成する関数は、間接バッファの作成後にフック clone-indirect-buffer-hook
を実行します。このフックが実行される際、新たに作成された間接バッファが現在のバッファとなります。
注意:バッファのテキストに変更が加えられた際、変更フックはベースバッファでのみ実行されます。これは、これらのフックに含まれる関数の多くが、間接バッファで正しく動作するように設計されていないためです。したがって、間接バッファで変更フック関数が必要な場合は、ベースバッファのフックにその関数を手動で追加した上で、目的の間接バッファでその関数が動作するようにする必要があります。