Проверьте, был ли успешен forward-sexp в Emacs Lisp
Я хотел бы проверить, является ли (forward-sexp 1)
был успешным или закончился с ошибкой. Проблема в том, что он возвращает ноль, даже если он был успешным. Как сделать эту проверку?
3 ответа
Пытаться scan-sexps
вместо. Это рабочая лошадка позади forward-sexp
и возвращает значимое значение.
Конечно, если парены не сбалансированы, то вы получите ошибку - так что вам понадобится ignore-errors
или же condition-case
,
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"))))
Вы можете прочитать больше об обработке ошибок на странице информации Написание кода для обработки ошибок.
forward-sexp
не возвращает nil, если есть ошибка (на самом деле в этом случае ничего не возвращается; вместо этого она сигнализирует об ошибке).