選択的表示(selective display)とはスクリーン上で特定の行を隠蔽する関連する機能ペアーを指します。
1つ目の変種は明示的な選択的表示であり、これはLispプログラム内で使用するようにデザインされています。これはテキスト変更により、どの行を隠すかを制御します。この種の隠蔽は現在では時代遅れであ推奨されていません。同じ効果を得るには、かわりにinvisibleプロパティ(不可視のテキストを参照)を使用する必要があります。
2つ目の変種はインデントにもとづいて隠す行の選択を自動的に行います。この変種はユーザーレベルの機能としてデザインされています。
選択的表示を明示的に制御する方法では改行(control-j)を復帰(control-m)に置換します。これにより以前は行末に改行があった行は隠蔽されます。厳密に言うと改行だけが行を分離できるので、これはもはや一時的には行ではなく前の行の一部です。
選択的表示は編集コマンドに直接影響を与えません。たとえばC-f
(forward-char)は隠蔽された行へと気軽にポイントを移動します。しかし復帰文字による改行文字の置換は、いくつかの編集コマンドに影響を与えます。たとえばnext-lineは改行だけを検索するために、隠蔽された行をスキップします。選択的表示を使用するモードは改行を考慮するコマンドを定義したり、テキストのどの部分を隠すか制御することもできます。
選択的表示されたバッファーをファイルに書き込む際には、control-mはすべて改行として出力されます。これはファイル内のテキストを読み取る際には、すべて問題なく隠蔽されずに表示されることを意味します。選択的表示はEmacs内でのみ顕在する効果です。
このバッファーローカル変数は選択的表示を有効にする。これは行、または行の一部を隠すことができることを意味する。
selective-displayの値がtなら、文字control-mが隠蔽されたテキストの開始をマークする。control-mと後続する行の残りは表示されない。これは明示的な選択的表示である。
selective-displayの値が正の整数なら、それより多くの列によるインデントで始まる行は表示されない。
バッファーの一部が隠蔽されている際には垂直移動コマンドはあたかもその部分を存在しないかのように処理して、1回の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 ----------
省略記号(‘…’)にたいして他のテキストを代替えするためにディスプレイテーブルを使用できる。ディスプレーテーブルを参照のこと。