From cc3aaba731c08e8e2af6a97d69ab70052bf12137 Mon Sep 17 00:00:00 2001 From: Matthias Meulien Date: Tue, 15 Feb 2022 23:39:02 +0100 Subject: [PATCH 1/2] 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 8753326881..61c532c1f3 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -344,6 +344,17 @@ bookmark-name-from-full-record 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 @@ bookmark-location (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 @@ bookmark-bmenu--revert (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 @@ bookmark-bmenu--revert '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-bmenu-mode (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-bmenu--name-predicate 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 4979a2c0e2..193cf42ea4 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -2247,6 +2247,8 @@ doc-view-bookmark-jump (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 5fb5dcfb19..d1b9357f3c 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -936,6 +936,7 @@ help-bookmark-jump (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 9b0bbb70df..d8bd2937db 100644 --- a/lisp/image-dired.el +++ b/lisp/image-dired.el @@ -2792,6 +2792,7 @@ image-dired-bookmark-jump ;; (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 bb8cd0d312..0565663c38 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -5449,6 +5449,7 @@ Info-bookmark-jump (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 eaa5c11938..9db07b51db 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2499,6 +2499,8 @@ eww-bookmark-jump "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 ba6e098d98..944b409ea2 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1560,6 +1560,8 @@ vc-dir-bookmark-jump (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 e16785329a..c0c8f34348 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -4579,6 +4579,8 @@ woman-bookmark-jump (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.30.2