Spec-Zone.ru › Elisp

Переформатирование

Переформатирование означает корректировку длины строк (путём перемещения разрывов строк), чтобы они были близки к указанной максимальной ширине, но не превышали её. Кроме того, строки можно выравнивать по ширине, то есть вставлять пробелы так, чтобы левое и/или правое поля точно совпадали. Ширина задаётся переменной fill-column. Для удобства чтения длина строк не должна превышать примерно 70 столбцов.

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

Большинство команд в этом разделе возвращают значения, не имеющие практического смысла. Все функции переформатирования учитывают текущие левое и правое поля, а также текущий стиль выравнивания (см. Поля при переформатировании). Если текущий стиль выравнивания — none, функции переформатирования ничего не делают.

Некоторые функции переформатирования принимают аргумент justify. Если он не равен nil, это означает, что нужно выполнить выравнивание. Чтобы запросить определённый стиль выравнивания, можно указать left, right, full или center. Если указано t, используется текущий стиль выравнивания для этой части текста (см. ниже current-justification). Любое другое значение рассматривается как full.

При интерактивном вызове функций переформатирования с аргументом-префиксом для justify подразумевается значение full.

Команда: fill-paragraph &optional justify region

Эта команда переформатирует абзац в точке или после неё. Если justify не равен nil, каждая строка также выравнивается. Для определения границ абзаца используются стандартные команды перемещения по абзацам. См. Абзацы в Руководстве GNU Emacs.

Если region не равен nil, режим Transient Mark включён и метка активна, эта команда вызывает fill-region, чтобы переформатировать все абзацы в области, а не только текущий абзац. При интерактивном вызове этой команды region равен t.

Команда: unfill-paragraph arg &optional beg end

Эта команда выполняет обратную операцию: объединяет строки текущего абзаца. Если задан числовой аргумент-префикс arg, операция применяется к указанному числу абзацев. Если аргумент-префикс не задан и область активна, отменяется форматирование каждого абзаца в этой области. При вызове из Lisp с аргументом arg, равным nil, и значениями beg и end, не равными nil, отменяется форматирование абзацев в области, ограниченной beg и end.

Команда: fill-region start end &optional justify nosqueeze to-eop

Эта команда переформатирует каждый абзац в области от start до end. Если justify не равен nil, текст также выравнивается.

Если nosqueeze не равен nil, пробельные символы, кроме разрывов строк, остаются без изменений. Если to-eop не равен nil, форматирование продолжается до конца абзаца или до следующего жёсткого перевода строки, если включён use-hard-newlines (см. ниже).

Переменная paragraph-separate определяет, как распознаются абзацы. См. Стандартные регулярные выражения, используемые при редактировании.

Функция: pixel-fill-region start end pixel-width

В большинстве буферов Emacs используется моноширинный текст, поэтому все функции переформатирования (например, fill-region) работают с учётом количества символов и char-width. Однако Emacs может отображать и другие типы содержимого, например текст с изображениями и пропорциональными шрифтами, и для этого предназначена pixel-fill-region. Она переформатирует область текста от start до end с точностью до пикселя, поэтому текст с пропорциональными или несколькими разными шрифтами будет выглядеть правильно отформатированным независимо от различий в размерах символов. Аргумент pixel-width задаёт максимальную ширину строки в пикселях после переформатирования; это эквивалент fill-column в пикселях для fill-region. Например, этот фрагмент Lisp вставит текст пропорциональным шрифтом, а затем переформатирует его так, чтобы ширина не превышала 300 пикселей:

(insert (propertize
	 "This is a sentence that's ends here."
	 '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))
Команда: fill-individual-paragraphs start end &optional justify citation-regexp

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

Первые два аргумента, start и end, задают начало и конец переформатируемой области. Третий и четвёртый аргументы, justify и citation-regexp, необязательны. Если justify не равен nil, абзацы не только переформатируются, но и выравниваются. Если citation-regexp не равен nil, это означает, что функция обрабатывает почтовое сообщение и поэтому не должна переформатировать строки заголовка. Если citation-regexp — строка, она используется как регулярное выражение; если оно совпадает с началом строки, эта строка считается маркером цитаты.

Обычно fill-individual-paragraphs считает каждое изменение отступа началом нового абзаца. Если fill-individual-varying-indent не равен nil, абзацы разделяются только строками-разделителями. Этот режим подходит для абзацев с отступами, у которых первая строка имеет дополнительный отступ.

Пользовательский параметр: fill-individual-varying-indent

Эта переменная изменяет поведение fill-individual-paragraphs, как описано выше.

Команда: fill-region-as-paragraph start end &optional justify nosqueeze squeeze-after

Эта команда рассматривает область текста как один абзац и переформатирует её. Поведение команды задаётся переменной fill-region-as-paragraph-function; по умолчанию используется fill-region-as-paragraph-default, подробно описанная ниже.

Если область состояла из нескольких абзацев, пустые строки между ними удаляются. Если justify не равен nil, текст не только переформатируется, но и выравнивается.

Если nosqueeze не равен nil, пробельные символы, кроме разрывов строк, остаются без изменений. Если squeeze-after не равен nil, он задаёт позицию в области; пробельные символы, кроме разрывов строк, до этой позиции остаются без изменений.

В режиме адаптивного переформатирования эта команда по умолчанию вызывает fill-context-prefix для выбора префикса заполнения. См. Режим адаптивного переформатирования.

Команда: justify-current-line &optional how eop nosqueeze

Эта команда вставляет пробелы между словами текущей строки, чтобы строка заканчивалась точно на fill-column. Она возвращает nil.

Если аргумент how не равен nil, он явно задаёт стиль выравнивания. Это может быть left, right, full, center или none. Если указано t, используется заданный стиль выравнивания (см. ниже current-justification). nil означает выполнить полное выравнивание.

Если eop не равен nil, выполняется только выравнивание по левому краю, если current-justification задаёт полное выравнивание. Это используется для последней строки абзаца: даже если весь абзац выровнен по ширине, последняя строка не должна выравниваться таким образом.

Если nosqueeze не равен nil, внутренние пробелы не изменяются.

Пользовательский параметр: default-justification

Значение этой переменной задаёт стиль выравнивания для текста, в свойствах которого не указан собственный стиль. Возможные значения: left, right, full, center или none. Значение по умолчанию — left.

Функция: current-justification

Эта функция возвращает подходящий стиль выравнивания для переформатирования текста вокруг точки.

Она возвращает значение свойства текста justification в точке или значение переменной default-justification, если такого свойства текста нет. Однако для обозначения «не выравнивать» она возвращает nil, а не none.

Пользовательский параметр: sentence-end-double-space

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

Пользовательский параметр: sentence-end-without-period

Если значение этой переменной не равно nil, предложение может заканчиваться без точки. Это используется для таких языков, как тайский, в которых предложения заканчиваются двумя пробелами, но без точки.

Пользовательский параметр: sentence-end-without-space

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

Пользовательский параметр: fill-separate-heterogeneous-words-with-space

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

Переменная: fill-paragraph-function

Эта переменная позволяет переопределить переформатирование абзацев. Если её значение не равно nil, fill-paragraph вызывает эту функцию для выполнения переформатирования. Если функция возвращает значение, не равное nil, fill-paragraph считает задачу выполненной и немедленно возвращает это значение.

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

(let ((fill-paragraph-function nil))
  (fill-paragraph arg))
Переменная: fill-forward-paragraph-function

Эта переменная позволяет переопределить способ, которым функции переформатирования, такие как fill-region и fill-paragraph, переходят к следующему абзацу. Её значением должна быть функция, принимающая единственный аргумент n — количество абзацев для перехода — и возвращающая разность между n и фактическим количеством пройденных абзацев. Значение этой переменной по умолчанию — forward-paragraph. См. Абзацы в Руководстве GNU Emacs.

Переменная: fill-region-as-paragraph-function

Эта переменная позволяет переопределить способ, которым функции, такие как fill-paragraph и fill-region, переформатируют текст. Её значением должна быть функция, принимающая аргументы, определённые fill-region-as-paragraph, и возвращающая префикс заполнения, используемый при переформатировании. Значение этой переменной по умолчанию — fill-region-as-paragraph-default.

Переменная: use-hard-newlines

Если значение этой переменной не равно nil, функции переформатирования не удаляют переводы строк со свойством текста hard. Такие жёсткие переводы строк служат разделителями абзацев. См. Жёсткие и мягкие переводы строк в Руководстве GNU Emacs.

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

Spec-Zone.ru

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