33.13 Режим адаптивного заполнения

Когда включен Режим адаптивного заполнения, Emacs автоматически определяет префикс заполнения из текста в каждом заполняемом абзаце, а не используя заранее определенное значение. Во время заполнения этот префикс заполнения вставляется в начало второй и последующих строк абзаца, как описано в Заполнение и в Автозаполнение.

Пользовательская опция: adaptive-fill-mode

Режим адаптивного заполнения включен, когда эта переменная не равна nil. По умолчанию она равна t.

Функция: fill-context-prefix from to

Эта функция реализует основу режима адаптивного заполнения; она выбирает префикс заполнения на основе текста между from и to, обычно это начало и конец абзаца. Она делает это, просматривая первые две строки абзаца, основываясь на переменных, описанных ниже.

Обычно эта функция возвращает префикс заполнения, строку. Однако, прежде чем это сделать, функция выполняет финальную проверку (не упомянутую отдельно ниже), чтобы убедиться, что строка, начинающаяся с этим префиксом, не выглядит как начало абзаца. Если это происходит, функция сигнализирует об аномалии, возвращая вместо этого nil.

Подробно fill-context-prefix делает следующее:

  1. Она берет кандидата в префикс заполнения из первой строки — сначала она пытается использовать функцию в adaptive-fill-function (если таковая имеется), затем регулярное выражение adaptive-fill-regexp (см. ниже). Первый результат, не равный nil, или пустая строка, если оба равны nil, становится кандидатом для первой строки.
  2. Если абзац пока содержит только одну строку, функция проверяет действительность найденного кандидата префикса. Затем функция возвращает кандидата, если он действителен, или строку пробелов в противном случае. (см. описание adaptive-fill-first-line-regexp ниже).
  3. Когда абзац уже содержит две строки, функция затем ищет кандидата префикса во второй строке, используя тот же метод, что и для первой строки. Если она не находит его, она возвращает nil.
  4. Функция теперь эвристически сравнивает два кандидата префиксов: если не-пробельные символы в кандидате строки 2 встречаются в том же порядке в кандидате строки 1, функция возвращает кандидата строки 2. В противном случае она возвращает самую большую начальную подстроку, общую для обоих кандидатов (которая может быть пустой строкой).
Пользовательская опция: adaptive-fill-regexp

Режим адаптивного заполнения сопоставляет это регулярное выражение с текстом, начинающимся после пробелов левого поля (если таковые имеются) в строке; символы, которые оно сопоставляет, являются кандидатом этой строки в префикс заполнения.

Значение по умолчанию сопоставляет пробелы с некоторыми знаками препинания, перемешанными между ними.

Пользовательская опция: adaptive-fill-first-line-regexp

Используется только в однострочных абзацах, это регулярное выражение действует как дополнительная проверка действительности одного доступного кандидата префикса заполнения: кандидат должен соответствовать этому регулярному выражению или comment-start-skip. Если это не так, fill-context-prefix заменяет кандидата строкой пробелов той же ширины.

Значение по умолчанию этой переменной — "\\`[ \t]*\\'", которое соответствует только строке пробелов. Эффект этого значения по умолчанию заключается в том, чтобы принудительно сделать префиксы заполнения, найденные в однострочных абзацах, всегда чистыми пробелами.

Пользовательская опция: adaptive-fill-function

Вы можете указать более сложные способы автоматического выбора префикса заполнения, установив эту переменную в функцию. Функция вызывается с точкой после левого поля (если таковое имеется) строки, и она должна сохранить точку. Она должна вернуть либо префикс заполнения этой строки, либо nil, что означает, что она не смогла определить префикс.