Чи є щось подібне (declare (indent defun))
для guile, таким чином, подібний відступ визначених користувачем макросів define
с?
Наприклад, якщо я пишу наступний макрос,
(define-syntax my-when
(syntax-rules ()
((my-when condition exp ...)
(if condition
(begin exp ...)))))
Тоді я отримую відступ, який виглядає так:
(my-when #t
(write "hi"))
Але воліли б наступне
(my-when #t
(write "hi"))
У elisp, я міг би отримати бажаний відступ через
(defmacro my-when (condition &rest body)
(declare (indent defun))
`(if ,condition
,@body))
(my-when t
(message "hi"))
Примітки щодо версії / режиму: emacs 26, scheme-mode
ж / geiser
, geiser-impl--implementation
= guile
Відповіді:
3 для відповіді № 1Додайте підказку для відступу для символу:
(put "my-when "scheme-indent-function 1)
Це більш-менш те, що (declare (indent 1))
робить в defmacro
.
lisp-mode
використовує lisp-indent-line
, який шукає lisp-indent-function
властивість на символ. Вбудований scheme-mode
використовує lisp-indent-function
, так що ви думаєте, що це буде працювати так само, як в lisp-mode
. Однак ім'я властивості має відповідати імені режиму. Подивитися https://www.gnu.org/software/emacs/manual/html_node/elisp/Indenting-Macros.html#Indenting-Macros за значенням майна.