检查Emacs Lisp中的forward-sexp是否成功

Pas*_*ten 2 lisp emacs elisp emacs24

我想检查一个(forward-sexp 1)是成功的,还是以错误结束.问题是它返回nil,即使它成功了.怎么做这个检查?

sds*_*sds 8

试试吧scan-sexps.它是背后的主力,forward-sexp并返回一个有意义的价值.

当然,如果parens不平衡,那么你会得到一个错误 - 所以你需要ignore-errorscondition-case.


Tre*_*son 5

forward-sexp如果它不能向前移动点,则发出错误信号.condition-case如果你愿意,你可以抓住这个.以下是测试它的示例命令:

(defun test-forward-sexp ()
  "simple command testing (forward-sexp 1)"
  (interactive)
  (condition-case nil
      (progn
        (forward-sexp 1)
        (message "succeeded"))
    (error (message "failed"))))
Run Code Online (Sandbox Code Playgroud)

您可以在信息页面上阅读有关处理错误的更多信息.编写代码来处理错误.