Spec-Zone.ru › Elisp

Изучение содержимого буфера

Этот раздел описывает функции, которые позволяют программе 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

Spec-Zone.ru

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