Макросы с отступами
В определении макроса можно использовать форму declare (см. Определение макросов), чтобы указать, как клавиша TAB должна задавать отступы при вызове макроса. Спецификация отступа записывается следующим образом:
(declare (indent indent-spec))
В результате для имени макроса задаётся свойство lisp-indent-function.
Ниже перечислены возможные значения indent-spec:
nilТо же, что и отсутствие свойства: используется стандартный шаблон отступа.
defunОбрабатывать эту функцию как конструкцию «def»: считать вторую строку началом тела.
- целое число, number
Первые number аргументов функции являются особыми; остальные считаются телом выражения. Отступ строки в выражении зависит от того, является ли первый аргумент в ней особым. Если аргумент является частью тела, строка получает отступ на
lisp-body-indentстолбцов больше, чем открывающая скобка, с которой начинается содержащее её выражение. Если аргумент особый и является первым или вторым аргументом, строка получает отступ, вдвое превышающий это количество дополнительных столбцов. Если аргумент особый, но не первый и не второй, для строки используется стандартный шаблон.- символ, symbol
-
symbol должен быть именем функции; эта функция вызывается для вычисления отступа строки внутри данного выражения. Функция получает два аргумента:
- pos
Позиция, с которой начинается строка, для которой задаётся отступ.
- state
Значение, возвращаемое
parse-partial-sexp(примитивом Lisp для вычисления отступов и вложенности) при разборе текста до начала этой строки.
Функция должна возвращать либо число — количество столбцов отступа для этой строки, — либо список, первым элементом которого является такое число. Разница между возвращением числа и списка заключается в том, что число означает, что все следующие строки на том же уровне вложенности должны иметь такой же отступ; список означает, что для следующих строк могут потребоваться другие отступы. Это имеет значение, когда отступы вычисляются с помощью C-M-q: если возвращено число, C-M-q не нужно пересчитывать отступы следующих строк до конца списка.
- Переменная: lisp-indent-local-overrides
-
Эту переменную можно использовать, чтобы переопределить спецификацию отступа для определённых символов, заданную с помощью их свойства символа
lisp-indent-function(см. Свойства символов). Она предназначена для использования в качестве переменной, локальной для файла или каталога. См. раздел Локальные переменные в файлах в Руководстве GNU Emacs.Каждый ключ — это символ, а каждое значение — спецификация отступа, переопределяющая значение свойства
lisp-indent-functionэтого символа. Значение может иметь те же формы, что и значение свойства символа, описанное выше. Обратите внимание, что использовать функцию небезопасно и этого следует избегать, иначе всем пользователям, открывающим файл, придётся явно разрешать или запрещать её использование.Эта переменная используется функциями
lisp-indent-functionиcommon-lisp-indent-function. В случае последней свойства символовcommon-lisp-indent-function-for-elispиcommon-lisp-indent-functionимеют приоритет не только над свойствомlisp-indent-function, но и над этой переменной.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Indenting-Macros.html