選択的表示とは、画面上の特定の行を非表示にするための、関連する一対の機能を指します。
最初のバリエーションである明示的な選択的表示は、Lispプログラムでの使用を想定して設計されました。これはテキストを変更することで、どの行を非表示にするかを制御するものです。このような非表示の手法は現在では廃れており、非推奨となっています。代わりに、invisible プロパティ(Invisible Text を参照)を使用して同様の効果を得るようにしてください。
2つ目のバリエーションでは、非表示にする行の選択がインデントに基づいて自動的に行われます。このバリエーションは、ユーザーレベルの機能として設計されています。
明示的な選択的表示を制御する方法は、改行(control-j)をキャリッジリターン(control-m)に置き換えることです。その改行に続く行だったテキストは、非表示になります。厳密に言えば、行を区切れるのは改行のみであるため、一時的に行ではなくなり、前の行の一部となります。
選択的表示は、編集コマンドに直接影響しません。例えば、C-f (forward-char)
は迷わずポイントを非表示テキスト内へ移動させます。しかし、改行文字をキャリッジリターン文字に置換すると、一部の編集コマンドに影響が出ます。例えば、next-line
は改行のみを検索するため、非表示行をスキップします。選択的表示を利用するモードでは、改行を考慮したコマンドや、テキストのどの部分を非表示にするかを制御するコマンドを定義することも可能です。
選択的に表示されたバッファをファイルに書き出すと、すべての Control-M が改行として出力されます。つまり、次にそのファイルを読み込む際は、何も隠されることなく正常に表示されます。選択的表示の効果は、Emacs 内でのみ確認できます。
このバッファローカル変数により、選択的な表示が可能になります。つまり、行や行の一部を非表示にすることができます。
selective-display の値が t
である場合、文字 control-m は非表示テキストの開始を示し、control-m
およびそれに続く行の残りの部分は表示されません。これは明示的な選択的表示です。
selective-display
の値が正の整数である場合、それより多い列数のインデントから始まる行は表示されません。
バッファの一部が非表示になっている場合、垂直移動コマンドはその部分が存在しないものとして動作するため、単一の next-line コマンドで任意の数の非表示行をスキップできます。ただし、文字移動コマンド(forward-char
など)は非表示部分をスキップせず、(少々工夫すれば)非表示部分にテキストを挿入したり削除したりすることが可能です。
以下の例では、selective-displayの値に応じて変化するバッファfooの表示上の外観を示します。バッファの内容は変わりません。
(setq selective-display nil)
⇒ nil
---------- Buffer: foo ----------
1 on this column
2on this column
3n this column
3n this column
2on this column
1 on this column
---------- Buffer: foo ----------
(setq selective-display 2)
⇒ 2
---------- Buffer: foo ----------
1 on this column
2on this column
2on this column
1 on this column
---------- Buffer: foo ----------
このバッファローカル変数が nil 以外の場合、Emacs は非表示テキストが続く行の末尾に
‘…’ を表示します。この例は前の例の続きです。
(setq selective-display-ellipses t)
⇒ t
---------- Buffer: foo ----------
1 on this column
2on this column ...
2on this column
1 on this column
---------- Buffer: foo ----------
表示テーブルを使用して、省略記号(‘…’)を別のテキストに置き換えることができます。表示テーブルを参照してください。