Внутри определения макроса вы можете использовать форму declare (см. Определение макросов), чтобы указать, как TAB должен отступать вызовы макроса. Спецификация отступа записывается следующим образом:
(declare (indent indent-spec))
Это устанавливает свойство lisp-indent-function для имени макроса.
Ниже приведены возможности для indent-spec:
nilЭто то же самое, что отсутствие свойства — используется стандартный шаблон отступа.
defunОбрабатывайте эту функцию как конструкцию
Первые number аргументы функции являются дифференцированными аргументами; остальные считаются телом выражения. Строка в выражении отступает в соответствии с тем, является ли первый аргумент в ней дифференцированным или нет. Если аргумент является частью тела, строка отступает на lisp-body-indent больше столбцов, чем открывающая скобка, начинающая содержащее выражение. Если аргумент дифференцирован и является первым или вторым аргументом, он отступает в два раза больше этих дополнительных столбцов. Если аргумент дифференцирован, но не является первым или вторым аргументом, строка использует стандартный шаблон.
symbol должен быть именем функции; эта функция вызывается для вычисления отступа строки внутри этого выражения. Функция принимает два аргумента:
Позиция, с которой начинается строка, которую нужно отступить.
Значение, возвращенное parse-partial-sexp (примитив Lisp для вычисления отступов и вложенности), когда он парсит до начала этой строки.
Она должна вернуть либо число, которое является количеством столбцов отступа для этой строки, либо список, чей первый элемент — такое число. Разница между возвратом числа и возвратом списка в том, что число говорит о том, что все последующие строки на том же уровне вложенности должны иметь отступ точно такой же, как и эта; а список говорит о том, что последующие строки могут потребовать разного отступа. Это имеет значение, когда отступ вычисляется с помощью C-M-q; если значение является числом, C-M-q не нужно пересчитывать отступ для последующих строк до конца списка.