Spec-Zone.ru › Elisp

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

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

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

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

Функция: fill-context-prefix от до

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

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

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

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

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

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

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

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

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

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

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

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Adaptive-Fill.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API