Ввод отступов, управляемый основным режимом
Важная функция каждого основного режима — настройка клавиши 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