summaryrefslogtreecommitdiff
path: root/lisp/buff-menu.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-02-24 21:57:34 +0200
committerEli Zaretskii <eliz@gnu.org>2022-02-24 21:57:34 +0200
commit794fbd1c07696a87352ddd9703bb2f8f6a7945ff (patch)
tree5a51ea7e597ed3bd70a9048bb3d9142a0e56a178 /lisp/buff-menu.el
parentbd17fa2c7565f180cedbfa396c0b159e144178cb (diff)
downloademacs-794fbd1c07696a87352ddd9703bb2f8f6a7945ff.tar.gz
emacs-794fbd1c07696a87352ddd9703bb2f8f6a7945ff.tar.bz2
emacs-794fbd1c07696a87352ddd9703bb2f8f6a7945ff.zip
Make 't' in Buffer-menu be more defensive
* lisp/buff-menu.el (Buffer-menu-visit-tags-table): Verify that the buffer holds a tags-table file before using it as such. (Bug#54133)
Diffstat (limited to 'lisp/buff-menu.el')
-rw-r--r--lisp/buff-menu.el13
1 files changed, 9 insertions, 4 deletions
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 50c2c155caf..179cc5484cd 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -527,13 +527,18 @@ If UNMARK is non-nil, unmark them."
(multi-occur (Buffer-menu-marked-buffers) regexp nlines))
+(autoload 'etags-verify-tags-table "etags")
(defun Buffer-menu-visit-tags-table ()
"Visit the tags table in the buffer on this line. See `visit-tags-table'."
(interactive nil Buffer-menu-mode)
- (let ((file (buffer-file-name (Buffer-menu-buffer t))))
- (if file
- (visit-tags-table file)
- (error "Specified buffer has no file"))))
+ (let* ((buf (Buffer-menu-buffer t))
+ (file (buffer-file-name buf)))
+ (cond
+ ((not file) (error "Specified buffer has no file"))
+ ((and buf (with-current-buffer buf
+ (etags-verify-tags-table)))
+ (visit-tags-table file))
+ (t (error "Specified buffer is not a tags-table")))))
(defun Buffer-menu-1-window ()
"Select this line's buffer, alone, in full frame."