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
最佳答案
为符号添加缩进提示:
(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。关于emacs - emacs 中的 guile 宏缩进,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43959836/