次: , 前: Invisible Text, 上: Display


38.5 選択表示

選択表示とは、 スクリーン上の特定の行を隠すための関連する機能対を指します。

最初の変種は、明示的な選択表示で、 Lispプログラムで使用するために設計されています。 テキストを変更することでどの行を隠すかを制御します。 テキストを不可視にする機能(see Invisible Text)は、 この機能で部分的に置き換えてあります。

2番目の変種は、字下げに基づいて自動的に隠す行を選択します。 この変種は、ユーザーレベルの機能であるように設計されています。

明示的な選択表示を制御するには、 改行(コントロールJ)を復帰(コントロールM)に置き換えます。 置換前の改行に続いていたそれまでの行は見えなくなります。 厳密にいえば、改行だけが行を区切るため、 一時的にはもう行ではなくなっているのです。 つまり、先行する行の一部になっているのです。

選択表示は、編集コマンドに直接には影響しません。 たとえば、C-fforward-char)は 躊躇なく不可視なテキストの中へポイントを移動します。 しかし、改行文字を復帰文字に置換すると 影響を受ける編集コマンドもあります。 たとえば、next-lineは、 改行だけを探すため不可視な行を飛び越してしまいます。 選択表示を使用するモードでは、 改行を考慮するようにコマンドを定義したり、 テキストの一部を可視/不可視にするコマンドを定義できます。

選択表示しているバッファをファイルに書き出すときには、 すべてのコントロールM(復帰)は改行として出力されます。 つまり、つぎにファイルを読み込むと不可視なものはなく、 普通に見えるのです。 選択表示の効果は、Emacsの内側だけで見えるのです。

— 変数: 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 ----------
     
— 変数: selective-display-ellipses

このバッファローカルな変数がnil以外であると、 不可視なテキストが続く行末に`...'を表示する。 つぎの例は、上の例の続きである。

          (setq selective-display-ellipses t)
               => t
          
          ---------- Buffer: foo ----------
          1 on this column
           2on this column ...
           2on this column
          1 on this column
          ---------- Buffer: foo ----------
     

表示テーブルを使って`...'にかわる別のテキストを指定できる。 see Display Tables