Previous: Fill Prefix, Up: Filling


19.5.4 適応型詰め込み

詰め込みコマンド自身が、 段落に対する適切な詰め込み接頭辞を推測できる状況もあります。 段落のすべての行の先頭に白文字やある種の句読点文字が使われている場合です。

段落が2行以上から成る場合、 段落の2行目から詰め込み接頭辞を切り出しますが、 1行目にもそれが現れるときに限ります。

段落が1行だけの場合には、その行から詰め込み接頭辞を切り出す かもしれません 1。 こういった状況では、つぎのような3つの合理的な挙動が考えられるので、 接頭辞の決定は複雑です。

これら3つの整形スタイルは、いずれも一般的に使用されます。 そこで、詰め込みコマンドは、現れた接頭辞とそのときのメジャーモードに基づいて、 ユーザーが望むスタイルを決定しようとします。 判断基準はつぎのとおりです。

1行目でみつけた接頭辞がadaptive-fill-first-line-regexpに一致するか、 (メジャーモードに依存する)コメント開始文字列のようであれば、 みつけた接頭辞を段落の詰め込みに用います。 ただし、その接頭辞が後続の行に対して段落の始まりにならない場合に限ります。

さもなければ、みつけた接頭辞を相当分の空白に変換して、 それらの空白を段落の2行目以降の詰め込み接頭辞として使います。 ただし、それらの空白が後続の行に対して段落の始まりにならない場合に限ります。

テキスト(text)モード、および、 空行やページ区切りだけが段落を区切るモードでは、 適応型詰め込みによって選ばれた接頭辞が 段落の始まりになることはけっしてありませんから、 その接頭辞を段落の詰め込みに使用することができます。

変数adaptive-fill-regexpで、 行頭のどんな文字列を詰め込み接頭辞として使えるかを決定します。 この変数の正規表現に一致する行頭の文字列を接頭辞とします。 変数adaptive-fill-modenilを設定すると、 詰め込み接頭辞を自動的には切り出しません。

変数adaptive-fill-functionに関数を設定すると、 詰め込み接頭辞を自動的に切り出すためのより複雑な方法を指定できます。 この関数は行の左端の直後にポイントを置いて呼び出されます。 その行から類推される適切な詰め込み接頭辞を返さなくてはいけません。 その行に詰め込み接頭辞がなさそうであればnilを返します。


脚注

[1] 【訳注】段落に1行しかなければ、 詰め込み接頭辞を切り出す必要はないと思うかもしれないが、 たとえば、その行が詰め込み桁より長かったり、 新たな入力によって複数行の段落になったときのことを考えてみてほしい。