所以我开始学习一些lisp/elisp来优化我的emacs环境,我已经开始制作一个简单的emacs库,主要的障碍是能够判断输入的括号是否匹配我查看了emacs源代码(paren.el.gz),发现可以使用函数show-paren-function
来确定它是否匹配。
到目前为止我得到的是:
(defun it-is-a-paren()
(interactive)
(insert ")")
(if (show-paren-function)
(message "%s" "it is a match")
(message "%s" "it is not")))
所以这是非常基本的,而且“它是一个匹配”可以正常工作,但是当它应该抛出“它不是”时,它没有,相反它给了我“错误的类型参数:integer-or-marker-p,t”。
是否有足够熟悉的人建议使用不同的函数,或者也许我应该编写自己的函数,而不是使用
show-paren-function
或者有办法避免这个错误(类似于异常处理)? 最佳答案
您要查找的“异常处理”类构造是condition-case
。
(defun its-a-paren()
(interactive)
(insert ")")
(condition-case ex
(if (show-paren-function)
(message "its a match")
(message "its not"))
(error (message "its not"))))
编辑:查看
show-paren-function
的代码,在我看来,这个错误是一个bug,因为它来自表达式(goto-char pos)
,其中pos
是t
。无论如何,
show-paren-function
使用scan-sexps
查找匹配的paren根据在show-paren-function
中的操作方式,您的案例的简化功能是:(defun its-a-paren()
(interactive)
(insert ")")
(condition-case ()
(progn
(scan-sexps (point) -1)
(message "It's a match"))
(error (message "It's not a match"))))
关于emacs - 应对“错误类型的论点”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9862401/