Spec-Zone.ru › Elisp

Макросы с отступами

В определении макроса можно использовать форму 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

Spec-Zone.ru

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