Заполнение означает регулировку длины строк (путём перемещения разрывов строк) так, чтобы они были близки (но не превышали) заданную максимальную ширину. Кроме того, строки могут быть выровнены по ширине, что означает вставку пробелов для точного совпадения левого и/или правого полей. Ширина управляется переменной fill-column. Для удобства чтения строки должны быть не длиннее 70 или около того столбцов.
Вы можете использовать режим автоматического заполнения (см. Автоматическое заполнение), чтобы заполнять текст автоматически по мере его вставки, но изменения в существующем тексте могут оставить его неправильно заполненным. Тогда вам нужно заполнить текст явно.
Большинство команд в этом разделе возвращают значения, которые не имеют смысла. Все функции, выполняющие заполнение, учитывают текущее левое поле, текущее правое поле и текущий стиль выравнивания (см. Поля для заполнения). Если текущий стиль выравнивания — none, функции заполнения фактически ничего не делают.
Некоторые функции заполнения имеют аргумент justify. Если он не равен nil, это запрашивает некоторый вид выравнивания. Это может быть left, right, full или center для запроса конкретного стиля выравнивания. Если он равен t, это означает использование текущего стиля выравнивания для этой части текста (см. current-justification ниже). Любое другое значение рассматривается как full.
Когда вы вызываете функции заполнения интерактивно, использование префиксного аргумента подразумевает значение full для justify.
Эта команда заполняет абзац в точке или после неё. Если justify не равен nil, каждая строка также выравнивается. Она использует обычные команды перемещения по абзацам для поиска границ абзацев. См. Абзацы в Руководстве по GNU Emacs.
Когда region не равен nil, то если включён режим Transient Mark и метка активна, эта команда вызывает fill-region для заполнения всех абзацев в области, вместо заполнения только текущего абзаца. При интерактивном вызове этой команды region равен t.
Эта команда заполняет каждый абзац в области от start до end. Она также выполняет выравнивание, если justify не равен nil.
Если nosqueeze не равен nil, это означает, что пробельные символы, кроме разрывов строк, остаются нетронутыми. Если to-eop не равен nil, это означает продолжение заполнения до конца абзаца — или до следующего жёсткого перевода строки, если включён use-hard-newlines (см. ниже).
Переменная paragraph-separate управляет тем, как различать абзацы. См. Стандартные регулярные выражения, используемые при редактировании.
Большинство буферов Emacs используют моноширинный текст, поэтому все функции заполнения (например, fill-region) работают на основе количества символов и char-width. Однако Emacs может отображать другие типы объектов, например текст, содержащий изображения и использующий пропорциональные шрифты, и для этого существует pixel-fill-region. Она заполняет область текста между start и end с точностью до пикселя, поэтому текст с использованием шрифтов переменной ширины или нескольких разных шрифтов выглядит заполненным независимо от разных размеров символов. Аргумент pixel-width задаёт максимальную ширину строки в пикселях, допустимую после заполнения; это эквивалент fill-column в fill-region с разрешением в пикселях. Например, этот фрагмент Lisp вставляет текст с использованием пропорционального шрифта, а затем заполняет его так, чтобы ширина не превышала 300 пикселей:
(insert (propertize "Это предложение, которое заканчивается здесь." 'face 'variable-pitch)) (pixel-fill-region (point) (point-max) 300)
Если start не находится в начале строки, горизонтальная позиция start, переведённая в пиксели, будет использоваться как префикс отступа для последующих строк.
Вспомогательная функция pixel-fill-width может использоваться для вычисления ширины в пикселях. Если вызвать её без аргументов, она вернёт значение, немного меньшее ширины текущего окна. Первый необязательный аргумент, columns, задаёт количество столбцов с использованием стандартных моноширинных шрифтов, например fill-column. Второй необязательный аргумент — окно для использования. Обычно её используют так:
(pixel-fill-region start end (pixel-fill-width fill-column))
Эта команда заполняет каждый абзац в области в соответствии с его индивидуальным префиксом заполнения. Таким образом, если строки абзаца были сдвинуты пробелами, заполненный абзац останется сдвинутым таким же образом.
Первые два аргумента, start и end, — это начало и конец области для заполнения. Третий и четвёртый аргументы, justify и citation-regexp, являются необязательными. Если justify не равен nil, абзацы также выравниваются. Если citation-regexp не равен nil, это означает, что функция работает с почтовым сообщением и поэтому не должна заполнять строки заголовков. Если citation-regexp является строкой, она используется как регулярное выражение; если оно совпадает с началом строки, эта строка рассматривается как маркер цитирования.
Обычно fill-individual-paragraphs считает каждое изменение отступа началом нового абзаца. Если fill-individual-varying-indent не равен nil, то только строки-разделители разделяют абзацы. Этот режим может обрабатывать абзацы с отступом, имеющие дополнительный отступ на первой строке.
Эта переменная изменяет действие fill-individual-paragraphs так, как описано выше.
Эта команда рассматривает область текста как один абзац и заполняет его. Если область состояла из многих абзацев, пустые строки между абзацами удаляются. Эта функция выполняет выравнивание, а также заполнение, когда justify не равен nil.
Если nosqueeze не равен nil, это означает, что пробельные символы, кроме разрывов строк, остаются нетронутыми. Если squeeze-after не равен nil, он задаёт позицию в области и означает, что пробельные символы, кроме разрывов строк, должны оставаться нетронутыми перед этой позицией.
В режиме адаптивного заполнения эта команда вызывает fill-context-prefix для выбора префикса заполнения по умолчанию. См. Режим адаптивного заполнения.
Эта команда вставляет пробелы между словами текущей строки так, чтобы строка заканчивалась точно на fill-column. Она возвращает nil.
Аргумент how, если он не равен nil, явно задаёт стиль выравнивания. Это может быть left, right, full, center или none. Если он равен t, это означает следование заданному стилю выравнивания (см. current-justification ниже). nil означает полное выравнивание.
Если eop не равен nil, это означает выполнение только выравнивания по левому краю, если current-justification задаёт полное выравнивание. Это используется для последней строки абзаца; даже если абзац в целом полностью выровнен, последняя строка не должна быть такой.
Если nosqueeze не равен nil, это означает, что внутренние пробелы не изменяются.
Значение этой переменной задаёт стиль выравнивания для текста, который не задаёт стиль с помощью текстового свойства. Возможные значения: left, right, full, center или none. Значение по умолчанию — left.
Эта функция возвращает подходящий стиль выравнивания для заполнения текста вокруг точки.
Она возвращает значение текстового свойства justification в точке или значение переменной default-justification, если такого текстового свойства нет. Однако она возвращает nil, а не none, для обозначения «не выравнивать».
Если эта переменная не равна nil, точка, после которой следует только один пробел, не считается концом предложения, и функции заполнения избегают разрыва строки в таком месте.
Если эта переменная не равна nil, предложение может заканчиваться без точки. Это используется для таких языков, как тайский, где предложения заканчиваются двойным пробелом, но без точки.
Если эта переменная не равна nil, она должна быть строкой символов, которые могут заканчивать предложение без следующих за ними пробелов.
Если эта переменная не равна nil, два слова разных типов (например, английское и CJK) будут разделяться пробелом при объединении одного, которое находится в конце строки, и другого, которое находится в начале следующей строки, при заполнении.
Эта переменная предоставляет способ переопределения заполнения абзацев. Если её значение не равно nil, fill-paragraph вызывает эту функцию для выполнения работы. Если функция возвращает значение, не равное nil, fill-paragraph считает, что работа выполнена, и немедленно возвращает это значение.
Обычное использование этой возможности — заполнение комментариев в режимах языков программирования. Если функции необходимо заполнить абзац обычным способом, она может сделать это следующим образом:
(let ((fill-paragraph-function nil)) (fill-paragraph arg))
Эта переменная предоставляет способ переопределения того, как функции заполнения, такие как fill-region и fill-paragraph, перемещаются вперёд к следующему абзацу. Её значение должно быть функцией, которая вызывается с одним аргументом n — количеством абзацев для перемещения, и должна возвращать разницу между n и фактически перемещённым количеством абзацев. Значение по умолчанию этой переменной — forward-paragraph. См. Абзацы в Руководстве по GNU Emacs.
Если эта переменная не равна nil, функции заполнения не удаляют переводы строк, имеющие текстовое свойство hard. Эти жёсткие переводы строк действуют как разделители абзацев. См. Жёсткие и мягкие переводы строк в Руководстве по GNU Emacs.