From 7c995264359824cc1aca40ca37201db5ed44e659 Mon Sep 17 00:00:00 2001 From: Matthias Meulien Date: Tue, 15 Feb 2022 23:39:02 +0100 Subject: [PATCH] Extend bookmark menu with with handler type column * lisp/bookmark.el (bookmark-bmenu--revert): Extend table entries with handler type. (bookmark-bmenu-mode): Add handler type column. * lisp/doc-view.el (doc-view-bookmark-jump): Set bookmark handler type. * lisp/help-mode.el (help-bookmark-jump): Set bookmark handler type. * lisp/image-dired.el (image-dired-bookmark-jump): Set bookmark handler type. * lisp/info.el (Info-bookmark-jump): Set bookmark handler type. * lisp/net/eww.el (eww-bookmark-jump): Set bookmark handler type. * lisp/vc/vc-dir.el (vc-dir-bookmark-jump): Set bookmark handler type. * lisp/woman.el (woman-bookmark-jump): Set bookmark handler type. --- lisp/bookmark.el | 19 ++++++++++++++++++- lisp/doc-view.el | 2 ++ lisp/help-mode.el | 1 + lisp/image-dired.el | 1 + lisp/info.el | 1 + lisp/net/eww.el | 2 ++ lisp/vc/vc-dir.el | 2 ++ lisp/woman.el | 2 ++ 8 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 87533268812..61c532c1f34 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -344,6 +344,17 @@ This point is in `bookmark-current-buffer'.") BOOKMARK-RECORD is, e.g., one element from `bookmark-alist'." (car bookmark-record)) +(defun bookmark-type-from-full-record (bookmark-record) + "Return then type of BOOKMARK-RECORD. +BOOKMARK-RECORD is, e.g., one element from `bookmark-alist'. It's +type is read from the symbol property named +`bookmark-handler-type' read on the record handler function." + (let ((handler (bookmark-get-handler bookmark-record))) + (when (autoloadp (symbol-function handler)) + (autoload-do-load (symbol-function handler))) + (if (symbolp handler) + (get handler 'bookmark-handler-type) + ""))) (defun bookmark-all-names () "Return a list of all current bookmark names." @@ -1351,7 +1362,6 @@ minibuffer history list `bookmark-history'." (bookmark-get-filename bookmark-name-or-record) "-- Unknown location --")) - ;;;###autoload (defun bookmark-rename (old-name &optional new-name) "Change the name of OLD-NAME bookmark to NEW-NAME name. @@ -1790,6 +1800,7 @@ Don't affect the buffer ring order." (let (entries) (dolist (full-record (bookmark-maybe-sort-alist)) (let* ((name (bookmark-name-from-full-record full-record)) + (type (bookmark-type-from-full-record full-record)) (annotation (bookmark-get-annotation full-record)) (location (bookmark-location full-record))) (push (list @@ -1803,6 +1814,7 @@ Don't affect the buffer ring order." 'follow-link t 'help-echo "mouse-2: go to this bookmark in other window") name) + ,(or type "") ,@(if bookmark-bmenu-toggle-filenames (list location))]) entries))) @@ -1891,6 +1903,7 @@ Bookmark names preceded by a \"*\" have annotations. (setq tabulated-list-format `[("" 1) ;; Space to add "*" for bookmark with annotation ("Bookmark" ,bookmark-bmenu-file-column bookmark-bmenu--name-predicate) + ("Type" 15 bookmark-bmenu--type-predicate) ,@(if bookmark-bmenu-toggle-filenames '(("File" 0 bookmark-bmenu--file-predicate)))]) (setq tabulated-list-padding bookmark-bmenu-marks-width) @@ -1905,6 +1918,10 @@ Bookmark names preceded by a \"*\" have annotations. This is used for `tabulated-list-format' in `bookmark-bmenu-mode'." (string< (caar a) (caar b))) +(defun bookmark-bmenu--type-predicate (a b) + "Predicate to sort \"*Bookmark List*\" buffer by the type column. +This is used for `tabulated-list-format' in `bookmark-bmenu-mode'." + (string< (elt (cadr a) 2) (elt (cadr b) 2))) (defun bookmark-bmenu--file-predicate (a b) "Predicate to sort \"*Bookmark List*\" buffer by the file column. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 4979a2c0e24..193cf42ea42 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -2247,6 +2247,8 @@ See the command `doc-view-mode' for more information on this mode." (add-hook 'bookmark-after-jump-hook show-fn-sym) (bookmark-default-handler bmk))) +(put 'doc-view-bookmark-jump 'bookmark-handler-type "Docview") + ;; Obsolete. (defun doc-view-intersection (l1 l2) diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 5fb5dcfb195..d1b9357f3c9 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -936,6 +936,7 @@ BOOKMARK is a bookmark name or a bookmark record." (pop-to-buffer "*Help*") (goto-char position))) +(put 'help-bookmark-jump 'bookmark-handler-type "Help") (provide 'help-mode) diff --git a/lisp/image-dired.el b/lisp/image-dired.el index 9b0bbb70df9..d8bd2937db8 100644 --- a/lisp/image-dired.el +++ b/lisp/image-dired.el @@ -2792,6 +2792,7 @@ tags to their respective image file. Internal function used by ;; (bookmark-prop-get bookmark 'image-dired-file) (goto-char (point-min)))) +(put 'image-dired-bookmark-jump 'bookmark-handler-type "Image") ;;; Obsolete diff --git a/lisp/info.el b/lisp/info.el index bb8cd0d312f..0565663c38e 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -5449,6 +5449,7 @@ type returned by `Info-bookmark-make-record', which see." (bookmark-default-handler `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bmk))))) +(put 'Info-bookmark-jump 'bookmark-handler-type "Info") ;;;###autoload (defun info-display-manual (manual) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index eaa5c119385..9db07b51dbd 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2499,6 +2499,8 @@ Otherwise, the restored buffer will contain a prompt to do so by using "Default bookmark handler for EWW buffers." (eww (bookmark-prop-get bookmark 'location))) +(put 'eww-bookmark-jump 'bookmark-handler-type "EWW") + (provide 'eww) ;;; eww.el ends here diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index ba6e098d987..944b409ea28 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1560,6 +1560,8 @@ type returned by `vc-dir-bookmark-make-record'." (bookmark-default-handler `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bmk))))) +(put 'vc-dir-bookmark-jump 'bookmark-handler-type "VC") + (provide 'vc-dir) diff --git a/lisp/woman.el b/lisp/woman.el index e16785329a4..c0c8f343484 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -4579,6 +4579,8 @@ logging the message." (bookmark-default-handler `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark))))) +(put 'woman-bookmark-jump 'bookmark-handler-type "WoMan") + ;; Obsolete. (defvar woman-version "0.551 (beta)" "WoMan version information.") -- 2.39.5