Проверьте, был ли успешен 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, если есть ошибка (на самом деле в этом случае ничего не возвращается; вместо этого она сигнализирует об ошибке).

Другие вопросы по тегам