我正在尝试增加etags-select函数,这样如果点上的find-tag失败,它将回退到正常的find-tag.我试过的代码是:
(defun my-etags-find-tag ()
"Find at point or fall back"
(interactive)
(unless (etags-select-find-tag-at-point)
(etags-select-find-tag)))
(global-set-key (kbd "C-f") 'my-etags-find-tag)
Run Code Online (Sandbox Code Playgroud)
但是,当point不在有效标记时,这会失败.相反,我得到etags-select-find-tag-at-point抛出的错误:
etags-select-find-tag-at-point: Wrong type argument: char-or-string-p, nil
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只需要重复etags-select-find-tag-at-point完成的测试:
(defun my-etags-find-tag ()
"Find at point or fall back"
(interactive)
(if (find-tag-default)
(etags-select-find-tag-at-point)
(etags-select-find-tag)))
Run Code Online (Sandbox Code Playgroud)
但它似乎有点多余.是否可以捕获异常并在elisp中执行备用处理?
hua*_*uan 11
尝试ignore-errors; 例如,
(unless (ignore-errors (etags-select-find-tag-at-point))
(etags-select-find-tag))
Run Code Online (Sandbox Code Playgroud)
通常,(ignore-errors body)返回任何body回报; 当出现错误时,它会返回nil.
另请参阅condition-case更一般的条件处理.
如果您安装了Elisp信息手册,则可以从中获取更多详细信息
C-hSignore-errors.
我没有考虑到函数可能在成功时返回nil的可能性; 所以我们可能需要
(unless (ignore-errors (or (etags-select-find-tag-at-point) t))
(etags-select-find-tag))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |