Этот раздел описывает функции, которые позволяют программе на Lisp преобразовывать любую часть текста в буфере в строку.
Эта функция возвращает строку, содержащую копию текста области,
определённой позициями начало и конец в текущем буфере.
Если аргументы не являются позициями в доступной части буфера,
buffer-substring сигнализирует об ошибке
args-out-of-range.
Вот пример, в котором предполагается, что режим Font-Lock не включён:
---------- Буфер: foo ---------- Это содержимое буфера foo ---------- Буфер: foo ----------
(buffer-substring 1 10)
⇒ "Это соде"
(buffer-substring (point-max) 10)
⇒ "держимое буфера foo\n"
Если копируемый текст имеет какие-либо текстовые свойства, они копируются в строку вместе с символами, которым принадлежат. См. Текстовые свойства. Однако наложения (см. Наложения) в буфере и их свойства игнорируются и не копируются.
Например, если включён режим Font-Lock, вы можете получить результаты, подобные этим:
(buffer-substring 1 10)
⇒ #("Это соде" 0 1 (fontified t) 1 9 (fontified t))
Эта функция аналогична buffer-substring, за исключением того, что она
не копирует текстовые свойства, а только сами символы. См. Текстовые свойства.
Эта функция возвращает содержимое всей доступной части текущего буфера в виде строки. Если копируемый текст имеет какие-либо текстовые свойства, они копируются в строку вместе с символами, которым принадлежат.
Если вам нужно гарантировать, что результирующая строка при копировании
в другое место не изменит своего визуального отображения из-за
переупорядочивания двунаправленного текста, используйте функцию
buffer-substring-with-bidi-context
(см. buffer-substring-with-bidi-context).
Эта функция фильтрует текст буфера между началом и концом
с использованием функции, заданной переменной
filter-buffer-substring-function, и возвращает результат.
Функция фильтра по умолчанию обращается к устаревшему обёрточному хуку
filter-buffer-substring-functions (подробности об этом устаревшем
средстве см. в строке документации макроса with-wrapper-hook).
Если он равен nil, возвращается неизменённый текст из буфера,
т.е. то, что вернул бы buffer-substring.
Если удалять не равен nil, функция удаляет текст
между началом и концом после его копирования, как
delete-and-extract-region.
Код на Lisp должен использовать эту функцию вместо buffer-substring,
buffer-substring-no-properties
или delete-and-extract-region при копировании в доступные
пользователю структуры данных, такие как кольцо убиваний, буфер обмена X
и регистры. Основные и второстепенные режимы могут изменять
filter-buffer-substring-function, чтобы изменять такой текст
при его копировании из буфера.
Значение этой переменной — функция, которую filter-buffer-substring
будет вызывать для выполнения фактической работы. Функция получает три
аргумента, те же, что и у filter-buffer-substring,
которые она должна обрабатывать в соответствии с документацией этой функции.
Она должна возвращать отфильтрованный текст (и, опционально, удалять
исходный текст).
Следующие две переменные устарели в пользу
filter-buffer-substring-function, но всё ещё поддерживаются для
обратной совместимости.
Эта устаревшая переменная является обёрточным хуком, члены которого должны
быть функциями, принимающими четыре аргумента: fun, начало,
конец и удалять. fun — это функция, принимающая три
аргумента (начало, конец и удалять) и возвращающая
строку. В обоих случаях аргументы начало, конец и
удалять те же, что и у filter-buffer-substring.
Первая функция хука получает fun, эквивалентную операции по умолчанию
для filter-buffer-substring, т.е. она возвращает подстроку буфера
между началом и концом и, опционально, удаляет исходный текст
из буфера. В большинстве случаев функция хука вызовет fun один раз,
а затем выполнит собственную обработку результата. Следующая функция хука
получает fun, эквивалентную этой, и так далее. Фактическое
возвращаемое значение — это результат последовательного применения всех
функций хука.
Эта функция возвращает символ (или слово) в точке или около неё в виде строки. Возвращаемое значение не содержит текстовых свойств.
Если необязательный аргумент really-word не равен nil, она
находит слово; в противном случае она находит символ (который включает как
символы слова, так и символы-составляющие символа).
Если необязательный аргумент strict не равен nil, то точка
должна находиться в символе или слове или рядом с ним; если там нет
символа или слова, функция возвращает nil. В противном случае
допустим ближайший символ или слово на той же строке.
Возвращает thing (сущность) вокруг точки или рядом с ней в виде строки.
Аргумент thing — это символ, указывающий вид синтаксической сущности.
Возможные значения включают symbol (символ), list (список),
sexp (S-выражение), defun (определение функции),
filename (имя файла), existing-filename (существующее имя файла),
url (URL), word (слово), sentence (предложение),
whitespace (пробельный символ), line (строка),
page (страница), string (строка) и другие.
Когда необязательный аргумент no-properties не равен nil, эта
функция удаляет текстовые свойства из возвращаемого значения.
---------- Буфер: foo ----------
Джентльмены могут кричать «Ми∗р! Мир!»,
но мира нет.
---------- Буфер: foo ----------
(thing-at-point 'word)
⇒ "Мир"
(thing-at-point 'line)
⇒ "Джентльмены могут кричать «Мир! Мир!»,\n"
(thing-at-point 'whitespace)
⇒ nil
Эта переменная позволяет пользователям и режимам настраивать работу
thing-at-point. Это ассоциативный список из thing (сущностей)
и функций (вызываемых без аргументов), возвращающих эту сущность.
Записи для thing будут вычисляться по очереди, пока не будет
возвращён результат, отличный от nil.
Например, основной режим мог бы сказать:
(setq-local thing-at-point-provider-alist
(append thing-at-point-provider-alist
'((url . my-mode--url-at-point))))
Если ни один из поставщиков не вернул значение, отличное от nil,
то thing будет вычислен стандартным способом.