对于guile是否有类似(declare (indent defun))
的内容,因此用户定义的宏缩进就像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
w / geiser
,geiser-impl--implementation
= guile
答案 0 :(得分:3)
为符号添加缩进提示:
(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。