Spec-Zone.ru › Elisp

Ввод отступов, управляемый основным режимом

Важная функция каждого основного режима — настройка клавиши TAB для правильного отступа языка, который редактируется. Этот раздел описывает механизм клавиши TAB и способы его управления. Функции в этом разделе возвращают непредсказуемые значения.

Команда: indent-for-tab-command &опционально rigid

Это команда, привязанная к клавише TAB в большинстве режимов редактирования. Ее обычное действие — отступ текущей строки, но она может альтернативно вставлять символ табуляции или отступать область.

Вот что она делает:

  • Сначала она проверяет, включен ли режим Временных меток и активна ли область. Если это так, она вызывает indent-region для отступа всего текста в области (см. Отступ области).
  • В противном случае, если функция отступа в indent-line-function равна indent-to-left-margin (тривиальная команда, вставляющая символ табуляции), или если переменная tab-always-indent указывает на необходимость вставки символа табуляции (см. ниже), то она вставляет символ табуляции.
  • В противном случае она производит отступ текущей строки; это делается путем вызова функции в indent-line-function. Если строка уже отступается, и значение tab-always-indent равно complete (см. ниже), она пытается завершить текст в точке.

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

Переменная: indent-line-function

Значение этой переменной — функция, которая используется indent-for-tab-command, и различными другими командами отступа, для отступа текущей строки. Обычно она назначается основным режимом; например, режим Lisp устанавливает ее в lisp-indent-line, режим C — в c-indent-line, и так далее. Значение по умолчанию — indent-relative. См. Автоматический отступ.

Команда: indent-according-to-mode

Эта команда вызывает функцию в indent-line-function для отступа текущей строки, соответствующим текущему основному режиму.

Команда: newline-and-indent

Эта функция вставляет символ новой строки, затем отступает новую строку (следующую за только что вставленной новой строкой) в соответствии с основным режимом. Она производит отступ, вызывая indent-according-to-mode.

Команда: reindent-then-newline-and-indent

Эта команда переотступает текущую строку, вставляет новую строку в точку, а затем отступает новую строку (следующую за только что вставленной новой строкой). Она производит отступ обеих строк, вызывая indent-according-to-mode.

Параметр пользователя: tab-always-indent

Эта переменная может использоваться для настройки поведения команды TAB (indent-for-tab-command). Если ее значение равно t (значение по умолчанию), команда обычно просто отступает текущую строку. Если значение равно nil, команда отступает текущую строку только если точка находится в левом отступе или в отступе строки; в противном случае она вставляет символ табуляции. Если значение равно complete, команда сначала пытается отступить текущую строку, и если строка уже отступалась, она вызывает completion-at-point для завершения текста в точке (см. Завершение в буферах).

Параметр пользователя: tab-first-completion

Если tab-always-indent равно complete, то расширение или отступ могут быть дополнительно настроены с помощью переменной tab-first-completion. Можно использовать следующие значения:

eol

Завершение происходит только если точка находится в конце строки.

word

Завершение происходит, если следующий символ не имеет синтаксиса слова.

word-or-paren

Завершение происходит, если следующий символ не имеет синтаксиса слова или не является скобкой.

word-or-paren-or-punct

Завершение происходит, если следующий символ не имеет синтаксиса слова, не является скобкой и не является пунктуацией.

В любом случае, нажатие клавиши TAB второй раз всегда приводит к завершению.

Некоторые основные режимы должны поддерживать вложенные области текста, синтаксис которых принадлежит другому основному режиму. Примеры включают файлы literate programming, которые сочетают документацию и фрагменты исходного кода, программы Yacc/Bison, которые включают фрагменты кода Python или JS, и т.д. Для правильного отступа вложенных фрагментов основной режим должен делегировать отступ движку отступа другого режима (например, вызвать js-indent-line для JS-кода или python-indent-line для Python-кода), предоставив ему некоторый контекст для наведения на отступ. Основные режимы, со своей стороны, должны избегать вызова widen в своем коде отступа и подчиняться prog-first-column.

Переменная: prog-indentation-context

Эта переменная, если имеет значение, отличное от nil, хранит контекст отступа для движка отступа подрежима, предоставляемого основным режимом. Значение должно быть списком вида (first-column . rest. Элементы списка имеют следующее значение:

first-column

Столбец, используемый для конструкций верхнего уровня. Это заменяет значение столбца верхнего уровня, используемое подрежимом, обычно ноль.

rest

Это значение в настоящее время не используется.

Следующая вспомогательная функция должна использоваться движком отступа основного режима для поддержки вызовов в качестве подрежимов другого основного режима.

Функция: prog-first-column

Вызывайте эту функцию вместо использования литерального значения (обычно нуля) номера столбца для отступа конструкций программы верхнего уровня. Значение функции — номер столбца, который следует использовать для конструкций верхнего уровня. Когда в работе нет режима верхнего уровня, эта функция возвращает ноль.

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/Mode_002dSpecific-Indent.html

Spec-Zone.ru

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