Важной функцией каждого основного режима является настройка клавиши TAB для правильного отступа языка, который редактируется. В этом разделе описывается механизм клавиши TAB и то, как его контролировать. Функции в этом разделе возвращают непредсказуемые значения.
Это команда, привязанная к TAB в большинстве режимов редактирования. Ее обычное действие — отступить текущую строку, но она также может вставить символ табуляции или отступить регион.
Вот что она делает:
indent-region для отступа всего текста в
регионе (см. Отступ целого региона).
indent-line-function
равна indent-to-left-margin (тривиальная команда, которая вставляет
символ табуляции), или если переменная tab-always-indent
указывает, что должен быть вставлен символ табуляции (см. ниже), то она вставляет
символ табуляции.
indent-line-function. Если строка уже отступлена, и
значение tab-always-indent равно complete
(см. ниже), она пытается завершить текст в точке.
Если rigid не равно nil (интерактивно, с
аргументом префикса), то после выполнения этой команды, если она отступила строку или
вставила табуляцию, она также жестко отступает весь сбалансированный
выражение, начинающееся в начале текущей строки, чтобы отразить новый отступ. Этот
аргумент игнорируется, если команда отступает регион.
Значение этой переменной — это функция, которую indent-for-tab-command
и различные другие команды отступа используют для отступа текущей строки. Обычно она
присваивается основным режимом; например, в режиме Lisp она устанавливает ее в
lisp-indent-line, в режиме C она устанавливает ее в c-indent-line
и так далее. Значение по умолчанию — indent-relative. См. Автоматический отступ кода.
Эта команда вызывает функцию в indent-line-function для
отступа текущей строки способом, соответствующим текущему основному режиму.
Эта функция вставляет новую строку, а затем отступает новую строку (ту,
которая следует за только что вставленной новой строкой) в соответствии с основным
режимом. Она выполняет отступ, вызывая indent-according-to-mode.
Эта команда переотступает текущую строку, вставляет новую строку в точке,
а затем отступает новую строку (ту, которая следует за только что вставленной
новой строкой). Она выполняет отступ для обеих строк, вызывая
indent-according-to-mode.
Эту переменную можно использовать для настройки поведения команды TAB
(indent-for-tab-command). Если значение равно t
(по умолчанию), команда обычно просто отступает текущую строку. Если значение равно
nil, команда отступает текущую строку только в том случае, если
точка находится на левом поле или в отступе строки; в противном случае она
вставляет символ табуляции. Если значение равно complete,
команда сначала пытается отступить текущую строку, а если строка уже была
отступлена, она вызывает completion-at-point для завершения
текста в точке (см. Завершение в обычных буферах).
Если tab-always-indent равно complete,
можно дополнительно настроить, следует ли расширять или отступать с помощью
переменной tab-first-completion. Могут использоваться следующие
значения:
eolЗавершать только в том случае, если точка находится в конце строки.
wordЗавершать, если следующий символ не имеет синтаксиса слова.
word-or-parenЗавершать, если следующий символ не имеет синтаксиса слова или не является скобкой.
word-or-paren-or-punctЗавершать, если следующий символ не имеет синтаксиса слова, или не является скобкой, или не является пунктуацией.
В любом случае, повторное нажатие TAB всегда приводит к завершению.
Некоторые основные режимы должны поддерживать встроенные регионы текста,
синтаксис которых принадлежит другому основному режиму. Примеры включают
исходные файлы литературного программирования, которые
объединяют документацию и фрагменты исходного кода, программы Yacc/Bison,
включающие фрагменты кода на Python или JS и т. д. Чтобы правильно отступить
встроенные части, основной режим должен делегировать отступ другому
движку отступа другого режима (например, вызывать js-indent-line
для кода JS или python-indent-line для Python), предоставляя
ему некоторый контекст для управления отступом. Основные режимы, в свою
чарен, должны избегать вызова widen в своем коде отступа
и соблюдать prog-first-column.
Эта переменная, если она не равна nil, содержит
контекст отступа для движка отступа подрежима, предоставленного вышестоящим
основным режимом. Значение должно быть списком вида (first-column . rest.
Члены списка имеют следующее значение:
Столбец, который будет использоваться для конструкций верхнего уровня. Это заменяет значение по умолчанию для столбца верхнего уровня, используемого подрежимом, обычно ноль.
Это значение в настоящее время не используется.
Следующая удобная функция должна использоваться движком отступа основного режима в поддержку вызовов в качестве подрежимов другого основного режима.
Вызывайте эту функцию вместо использования буквального значения (обычно ноль) номера столбца для отступа конструкций программы верхнего уровня. Значение функции — это номер столбца, который следует использовать для конструкций верхнего уровня. Когда не действует вышестоящий режим, эта функция возвращает ноль.