Определение и использование полей
Поле — это последовательность смежных символов в буфере, имеющих одинаковое значение (сравнивая с 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