gpt4 book ai didi

emacs - emacs 中的 guile 宏缩进

转载 作者:行者123 更新时间:2023-12-02 12:25:32 26 4
gpt4 key购买 nike

是否有类似 (declare (indent defun)) 的东西,以便用户定义宏的缩进像 defines 一样工作?

例如,如果我编写以下宏,

(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/geisergeiser-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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com