Spec-Zone.ru › Elisp

Определение и использование полей

Поле — это последовательность смежных символов в буфере, имеющих одинаковое значение (сравнивая с eq) свойства field (либо текстового, либо наложения). Этот раздел описывает специальные функции, доступные для работы с полями.

Вы задаёте поле с помощью позиции буфера, pos. Мы представляем каждое поле как содержащее диапазон позиций буфера, поэтому заданная позиция обозначает поле, содержащее эту позицию.

Когда символы перед и после pos являются частью одного поля, нет сомнений, какое поле содержит pos: то, к которому относятся оба этих символа. Когда pos находится на границе между полями, к какому полю она относится, зависит от свойств прилипания field двух окружающих символов (см. Свойства прилипания). Поле, чьим свойством унаследует текст, вставленный в pos, и является полем, содержащим pos.

Существует аномальный случай, когда вставленный текст в позиции pos не унаследует свойства field ни с одной стороны. Это происходит, если свойство предыдущего символа field не является заднеприлипающим, и свойство последующего символа field не является переднеприлипающим. В этом случае pos не принадлежит ни предыдущему, ни последующему полю; функции работы с полями обрабатывают его как принадлежащее пустому полю, начало и конец которого оба находятся в pos.

Во всех этих функциях, если pos опущено или nil, значение точки используется по умолчанию. Если сужение введено, то pos должен находиться в доступной части. См. Сужение.

Функция: field-beginning &optional pos escape-from-edge limit

Эта функция возвращает начало поля, заданного pos.

Если pos находится в начале своего поля, и escape-from-edge не nil, то возвращаемое значение всегда является началом предыдущего поля, которое заканчивается в pos, независимо от свойств прилипания field вокруг pos.

Если limit не nil, это позиция буфера; если начало поля находится перед limit, то возвращается limit.

Функция: field-end &optional pos escape-from-edge limit

Эта функция возвращает конец поля, заданного pos.

Если pos находится в конце своего поля, и escape-from-edge не nil, то возвращаемое значение всегда является концом последующего поля, которое начинается в pos, независимо от свойств прилипания field вокруг pos.

Если limit не nil, это позиция буфера; если конец поля находится после limit, то возвращается limit.

Функция: field-string &optional pos

Эта функция возвращает содержимое поля, заданного pos, в виде строки.

Функция: field-string-no-properties &optional pos

Эта функция возвращает содержимое поля, заданного pos, в виде строки, игнорируя свойства текста.

Функция: delete-field &optional pos

Эта функция удаляет текст поля, заданного pos.

Функция: constrain-to-field new-pos old-pos &optional escape-from-edge only-in-line inhibit-capture-property

Эта функция ограничивает new-pos полем, к которому принадлежит old-pos — другими словами, она возвращает позицию, наиболее близкую к new-pos, которая находится в том же поле, что и old-pos.

Если new-pos nil, то constrain-to-field использует значение точки вместо него и перемещает точку в полученную позицию, помимо возвращения этой позиции.

Если old-pos находится на границе двух полей, допустимые конечные позиции зависят от аргумента escape-from-edge. Если escape-from-edge nil, то new-pos должно находиться в поле, чьё свойство field равно тому, которое унаследуют новые символы, вставленные в old-pos. (Это зависит от свойств прилипания field для символов до и после old-pos.) Если escape-from-edge не nil, new-pos может находиться в любом из двух смежных полей. Кроме того, если два поля разделены другим полем со специальным значением boundary, любая точка внутри этого специального поля также считается на границе.

Команды, такие как C-a без аргумента, которые обычно перемещаются назад к определённому виду местоположения и остаются там, когда туда доходят, вероятно, должны указывать nil для escape-from-edge. Другие команды движения, проверяющие поля, вероятно, должны передавать t.

Если необязательный аргумент only-in-line не nil, и ограничение new-pos обычным способом переместит его на другую строку, то new-pos возвращается без ограничений. Это используется в командах, которые перемещаются по строке, таких как next-line и beginning-of-line, чтобы они учитывали границы полей только в том случае, если они всё ещё могут переместиться на правильную строку.

Если необязательный аргумент inhibit-capture-property не nil, и old-pos имеет свойство с именем, не nil, то любые границы полей игнорируются.

Вы можете заставить constrain-to-field игнорировать все границы полей (и, следовательно, никогда не ограничивать ничего) привязывая переменную inhibit-field-text-motion к значению, не 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/Fields.html

Spec-Zone.ru

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