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


19.6 インダイレクトバッファー

インダイレクトバッファー(indirect buffer: 間接バッファー)は、そのインダイレクトバッファーのベースバッファー(base buffer: 基底バッファー)と呼ばれる、他のバッファーのテキストを共有します。ある点においては、ファイルに置けるシンボリックリンクの、バッファー版に例えることができます。

M-x make-indirect-buffer RET base-buffer RET indirect-name RET

ベースバッファーbase-bufferの、インダイレクトバッファーindirect-nameを作成します。

M-x clone-indirect-buffer RET

カレントバッファーの、インダイレクトバッファーを作成します。

C-x 4 c

カレントバッファーのインダイレクトバッファーを作成して、それを別のウィンドウで選択します(clone-indirect-buffer-other-window)。

インダイレクトバッファーのテキストは、常にベースバッファーのテキストと等しく、どちらかを編集すると、その変更はすぐにもう一方から見えるようになります。ここで言う“テキスト”にはテキストの文字とそれらのテキストプロパティの両方が含まれます。しかし他の観点では、インダイレクトバッファーとベースバッファーは、完全に分離されています。これらのバッファーは異なる名前、異なるポイント値、異なるナローイング、異なるマーカー、異なるオーバーレイ、異なるメジャーモード、異なるローカル変数をもつことができます。

インダイレクトバッファーはファイルをvisitできませんが、ベースバッファーはvisitできます。インダイレクトバッファーの保存を試みると、それは実際にはベースバッファーの保存として機能します。ベースバッファーをkillするとインダイレクトバッファーもkillされますが、インダイレクトバッファーのkillは、ベースバッファーに影響を与えません。

インダイレクトバッファーの1つの使い方としては、アウトラインの複数の視点からの表示です。Outline Viewsを参照してください。

手早くインダイレクトバッファーを作成するには、コマンドM-x clone-indirect-bufferを使う方法があります。これはカレントバッファーをベースバッファーとする、インダイレクトバッファーを作成して選択します。数引数を指定すると、インダイレクトバッファーの名前の入力を求めます。指定しない場合、カレントバッファー名の後ろに‘<n>’を付加した名前を使います。C-x 4 c (clone-indirect-buffer-other-window)は、M-x clone-indirect-bufferと同様に機能しますが、新しいバッファーを他のウィンドウで選択します。これらの関数はインダイレクトバッファーを作成した後、フックclone-indirect-buffer-hookを実行します。

インダイレクトバッファーを作成する、より一般的な方法はコマンドM-x make-indirect-bufferです。これはバッファーbase-bufferから、名前がindirect-nameのインダイレクトバッファーを作成します。これらの名前は、ミニバッファーを使って入力が求められます。

注意: バッファーのテキストにたいして変更が行われた際には、変更フックはベースバッファーでのみ実行されます。なぜならこれらのフックに登録されている関数のほとんどは、インダイレクトバッファーで正しく動作するように想定されていないからです。したがってインダイレクトバッファーで変更フック関数が必要なら、ベースバッファーにおいて手動でその関数を追加してから、その関数に目的であるインダイレクトバッファーを処理させる必要があります。

This page has generated for branch:work/add_lispintr, commit:59979a368cafa8126fa5b3b6b118de8020a831b4 to check Japanese translation.