Spec-Zone.ru › Elisp

Команды перемещения курсора на основе разбора

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

Функция: scan-lists от глубины count

Эта функция сканирует вперёд count сбалансированных скобочных группировок от позиции from. Она возвращает позицию, где остановлено сканирование. Если count отрицательно, сканирование происходит назад.

Если depth не равно нулю, позицию начала обработки интерпретировать как имеющую depth скобок. Сканер перемещается вперед или назад по буферу до тех пор, пока глубина не изменится на ноль count раз. Таким образом, положительное значение depth имеет эффект перемещения на depth уровней скобок от начальной позиции, а отрицательное depth — перемещения глубже на -depth уровней скобок.

Сканирование игнорирует комментарии, если parse-sexp-ignore-comments не nil.

Если сканирование достигает начала или конца доступной части буфера, прежде чем пройти count скобочных группировок, возвращается значение nil, если глубина в этот момент равна нулю; если глубина не равна нулю, генерируется ошибка scan-error.

Функция: scan-sexps от count

Эта функция сканирует вперёд count s-выражений от позиции from. Она возвращает позицию, где остановлено сканирование. Если count отрицательно, сканирование происходит назад.

Сканирование игнорирует комментарии, если parse-sexp-ignore-comments не nil.

Если сканирование достигает начала или конца (доступной части) буфера, находясь в середине скобочной группировки, генерируется ошибка. Если оно достигает начала или конца между группировками, но до того, как значение count будет использовано, возвращается nil.

Функция: forward-comment count

Эта функция перемещает курсор вперёд на count полных комментариев (то есть, включая открывающий разделитель и закрывающий разделитель, если таковой есть), плюс любые пробелы, встреченные по пути. Она перемещает курсор назад, если count отрицательно. Если встречается что-либо отличное от комментария или пробела, она останавливается, оставляя курсор в месте остановки. Это включает (например), нахождение конца комментария при движении вперёд и ожидании начала следующего. Функция также останавливается сразу после прохода по указанному количеству полных комментариев. Если найдено ожидаемое количество count комментариев, без чего-либо, кроме пробелов между ними, она возвращает t; в противном случае она возвращает nil.

Эта функция не может определить, являются ли проходящие комментарии вложенными в строку. Если они выглядят как комментарии, она обрабатывает их как комментарии.

Чтобы переместить курсор вперед через все комментарии и пробелы, следующие за текущей позицией курсора, используйте (forward-comment (buffer-size)). (buffer-size) — хорошее значение для использования, так как количество комментариев в буфере не может превысить его.

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/Motion-via-Parsing.html

Spec-Zone.ru

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