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


31.13 Adaptive Fillモード

Adaptive Fillモードが有効なとき、Emacsは事前定義された値を使用するのではなく、フィルされる各パラグラフのテキストから自動的にフィルプレフィクスを決定します。FillingAuto Fillingで説明されているように、このフィルプレフィクスはフィルの間にそのパラグラフの2行目以降の行頭に挿入されます。

User Option: adaptive-fill-mode

この変数が非nilならAdaptive Fillモードは有効。デフォルトはt

Function: fill-context-prefix from to

この関数はAdaptive Fillモード実装の肝である。これはfromからto、通常はパラグラフの開始から終了にあるテキストにもとづいてフィルプレフィクスを選択する。これは以下で説明する変数にもとづき、そのパラグラフの最初の2行を調べることによりこれを行う。

この関数は通常は文字列としてフィルプレフィクスをリターンする。しかしこれを行う前に、この関数はそのプレフィクスで始まる行がパラグラフの開始とは見えないだろうか、最終チェックを行う(以降では特に明記しない)。これが発生した場合には、この関数はかわりにnilをリターンすることにより異常を通知する。

以下はfill-context-prefixが行う詳細:

  1. 1行目からフィルプレフィクス候補を取得するために、(もしあれば)まずadaptive-fill-function内の関数、次にadaptive-fill-regexp (以下参照)の正規表現を試みる。これらの非nilの最初の結果、いずれもnilなら空文字列が1行目の候補となる。
  2. そのパラグラフが1行だけなら、関数は見つかったプレフィクス候補の妥当性をテストする。その後でこの関数はそれが妥当ならその候補を、それ以外はスペース文字列をリターンする(以下のadaptive-fill-first-line-regexpの説明を参照)。
  3. すでにそのパラグラフが2行以上なら、この関数は次に1行目にたいして行なったのとまったく同じ方法で2行目でプレフィクス候補を探す。見つからなければnilをリターンする。
  4. ここでこの関数は発見的手法により2つのプレフィクス候補を比較する。2行目の候補の非空白文字の並びが1行目の候補と同じなら、この関数は2行目の候補をリターンする。それ以外では2つの候補に共通するもっとも長い先頭の部分文字列(これは空文字列かもしれない)をリターンする。
User Option: adaptive-fill-regexp

Adaptive Fillモードは、(もしあれば)行の左マージン空白文字の後から開始されるテキストにたいしてこの正規表現をマッチする。マッチする文字列がその行のフィルプレフィクス候補。

デフォルト値は空白文字と特定の句読点文字が混在した文字列にマッチする。

User Option: adaptive-fill-first-line-regexp

この正規表現は1行だけのパラグラフに使用され、1つの可能なフィルプレフィクス候補の追加の妥当性評価として機能する。その候補は、この正規表現にマッチするか、comment-start-skipにマッチしなければならない。マッチしなければ、fill-context-prefixはその候補を“同じ幅”のスペース文字列に置き換える。

この変数のデフォルト値は "\\`[ \t]*\\'"であり、これは空白文字列だけにマッチする。このデフォルトの効果は1行パラグラフで見つかったフィルプレフィクスが、常に純粋な空白文字となるよう強制することである。

User Option: adaptive-fill-function

この変数に関数をセットすることにより、自動的なフィルプレフィクス選択にたいして、より複雑な方法を指定することが可能になる。その関数は、(もしあれば)行の左マージンの後のポイントで呼び出され、かつポイントを保たなければならない。その関数は、“その行”のフィルプレフィクス、またはプレフィクスの判断に失敗したことを意味するnilのいずれかをリターンすること。