ポイントで検索タグが失敗した場合、通常の検索タグにフォールバックするように、etags-select 関数を拡張しようとしています。私が試したコードは次のとおりです。
(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)
ただし、ポイントが有効なタグにない場合、これは失敗します。代わりに、etags-select-find-tag-at-point によってエラーがスローされます。
etags-select-find-tag-at-point: Wrong type argument: char-or-string-p, nil
この場合、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)))
しかし、それは少し冗長に思えます。例外をトラップして、elisp で代替処理を行うことは可能ですか?