Изучение содержимого буфера
Этот раздел описывает функции, которые позволяют программе Lisp преобразовать любой фрагмент текста в буфере в строку.
- Функция: buffer-substring start end
-
Эта функция возвращает строку, содержащую копию текста области, определенной позициями start и end в текущем буфере. Если аргументы не являются позициями в доступной части буфера,
buffer-substringсигнализирует об ошибкеargs-out-of-range.Вот пример, предполагающий, что режим Font-Lock не включен:
---------- Buffer: foo ---------- This is the contents of buffer foo ---------- Buffer: foo ----------
(buffer-substring 1 10) ⇒ "This is t"(buffer-substring (point-max) 10) ⇒ "he contents of buffer foo\n"Если копируемый текст имеет какие-либо свойства текста, эти свойства копируются в строку вместе с соответствующими символами. См. Свойства текста. Однако наложения (см. Наложения) в буфере и их свойства игнорируются и не копируются.
Например, если режим Font-Lock включен, вы можете получить такие результаты:
(buffer-substring 1 10) ⇒ #("This is t" 0 1 (fontified t) 1 9 (fontified t))
- Функция: buffer-substring-no-properties start end
Это аналогично
buffer-substring, за исключением того, что оно не копирует свойства текста, а только сами символы. См. Свойства текста.
- Функция: buffer-string
Эта функция возвращает содержимое всей доступной части текущего буфера в виде строки. Если копируемый текст имеет какие-либо свойства текста, эти свойства копируются в строку вместе с соответствующими символами.
Если вам нужно убедиться, что результирующая строка, при копировании в другое место, не изменит свой визуальный вид из-за переупорядочения текста с двунаправленной ориентацией, используйте функцию buffer-substring-with-bidi-context (см. buffer-substring-with-bidi-context).
- Функция: filter-buffer-substring start end &optional delete
-
Эта функция фильтрует текст буфера между start и end с использованием функции, заданной переменной
filter-buffer-substring-function, и возвращает результат.По умолчанию функция фильтра обращается к устаревшей функции-обработчику
filter-buffer-substring-functions(см. строку документации макросаwith-wrapper-hookдля получения подробностей об этой устаревшей функциональности) и устаревшей переменнойbuffer-substring-filters. Если оба ониnil, она возвращает неизменённый текст из буфера, то есть то, что вернула бы функцияbuffer-substring.Если delete не
nil, функция удаляет текст между start и end после его копирования, как иdelete-and-extract-region.Код Lisp должен использовать эту функцию вместо
buffer-substring,buffer-substring-no-properties, илиdelete-and-extract-regionпри копировании в доступные для пользователя структуры данных, такие как буфер обмена, буфер X и регистры. Основные и дополнительные режимы могут изменятьfilter-buffer-substring-function, чтобы изменить такой текст при его копировании из буфера.
- Переменная: filter-buffer-substring-function
Значение этой переменной — функция, которую
filter-buffer-substringвызовет для выполнения фактической работы. Функция получает три аргумента, такие же, как уfilter-buffer-substring, которые она должна обработать согласно документации этой функции. Она должна вернуть отфильтрованный текст (и, при необходимости, удалить исходный текст).
Следующие две переменные устарели из-за filter-buffer-substring-function, но всё ещё поддерживаются для обратной совместимости.
- Переменная: filter-buffer-substring-functions
-
Эта устаревшая переменная — это функция-обработчик, члены которой должны быть функциями, принимающими четыре аргумента: fun, start, end и delete. fun — это функция, которая принимает три аргумента (start, end и delete) и возвращает строку. В обоих случаях аргументы start, end и delete такие же, как у
filter-buffer-substring.Первая функция-обработчик получает fun, эквивалентную стандартной операции
filter-buffer-substring, то есть она возвращает подстроку буфера между start и end (обработанную любымиbuffer-substring-filters) и, при необходимости, удаляет исходный текст из буфера. В большинстве случаев функция-обработчик вызовет fun один раз, а затем выполнит свою обработку результата. Следующая функция-обработчик получает fun, эквивалентную этой, и так далее. Фактическое возвращаемое значение — результат работы всех функций-обработчиков последовательно.
- Переменная: buffer-substring-filters
Значение этой устаревшей переменной должно быть списком функций, принимающих один строковый аргумент и возвращающих другую строку. Функция по умолчанию
filter-buffer-substringпередаёт подстроку буфера первой функции в этом списке, а возвращаемое значение каждой функции передаётся следующей функции. Возвращаемое значение последней функции передаётсяfilter-buffer-substring-functions.
- Функция: current-word &optional strict really-word
-
Эта функция возвращает символ (или слово) в окрестности курсора в виде строки. Возвращаемое значение не включает свойства текста.
Если необязательный аргумент really-word не
nil, она находит слово; в противном случае она находит символ (который включает как символы слова, так и символы, составляющие символ).Если необязательный аргумент strict не
nil, то курсор должен быть в или рядом с символом или словом — если такого символа или слова нет, функция возвращаетnil. В противном случае допустим символ или слово вблизи на той же строке.
- Функция: thing-at-point thing &optional no-properties
-
Возвращает thing вокруг или рядом с курсором в виде строки.
Аргумент thing — это символ, указывающий на тип синтаксического объекта. Возможные значения включают
symbol,list,sexp,defun,filename,existing-filename,url,word,sentence,whitespace,line,page,string, и другие.Когда необязательный аргумент no-properties не
nil, эта функция удаляет свойства текста из возвращаемого значения.---------- Buffer: foo ---------- Gentlemen may cry ``Pea∗ce! Peace!,'' but there is no peace. ---------- Buffer: foo ---------- (thing-at-point 'word) ⇒ "Peace" (thing-at-point 'line) ⇒ "Gentlemen may cry ``Peace! Peace!,''\n" (thing-at-point 'whitespace) ⇒ nil- Переменная: thing-at-point-provider-alist
-
Эта переменная позволяет пользователям и режимам настраивать работу
thing-at-point. Это список ассоциаций thing и функций (вызываемых без параметров), которые возвращают этот thing. Элементы для thing будут вычисляться по очереди, пока не будет возвращён не-nilрезультат.Например, основной режим может сказать:
(setq-local thing-at-point-provider-alist (append thing-at-point-provider-alist '((url . my-mode--url-at-point))))Если ни один из поставщиков не возвращает не-
nilрезультат, thing будет вычислен стандартным способом.
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/Buffer-Contents.html