(when (eq 'bookmark (overlay-get temp 'category))
(delete-overlay (setq found temp))))))))))
+(defun bookmark-sort-by-last-modified-time (names)
+ "Sort bookmark NAMES by bookmark last modified time, then alphabetically."
+ (sort names (lambda (x y)
+ (let ((tx (bookmark-get-last-modified x))
+ (ty (bookmark-get-last-modified y)))
+ (if tx
+ (if ty
+ (or (time-less-p ty tx)
+ (and (time-equal-p ty tx)
+ (string-lessp x y)))
+ t)
+ (unless ty (string-lessp x y)))))))
+
(defun bookmark-maybe-sort-alist ()
"Return `bookmark-alist' for display.
If `bookmark-sort-flag' is T, then return a sorted by name copy of the alist.
(bookmark-menu-popup-paned-menu t prompt
(mapcar 'bookmark-name-from-full-record
(bookmark-maybe-sort-alist)))
- (let* ((completion-ignore-case bookmark-completion-ignore-case)
- (default (unless (equal "" default) default)))
- (completing-read (format-prompt prompt default)
- (completion-table-with-metadata
- bookmark-alist
- '((category . bookmark)
- (narrow-completions-function
- . bookmark-narrow-completions-by-type)))
- nil 0 nil 'bookmark-history default))))
+ (let ((default (unless (equal "" default) default)))
+ (minibuffer-with-setup-hook
+ (lambda ()
+ (setq-local completion-ignore-case bookmark-completion-ignore-case)
+ (setq-local minibuffer-completions-sort-orders
+ (cons '(?m "modified" "Sort by last modified time"
+ bookmark--sort-by-last-modified-time
+ "latest modified first")
+ minibuffer-completions-sort-orders)))
+ (completing-read (format-prompt prompt default)
+ (completion-table-with-metadata
+ bookmark-alist
+ `((category . bookmark)
+ (narrow-completions-function
+ . bookmark-narrow-completions-by-type)))
+ nil 0 nil 'bookmark-history default)))))
(defun bookmark-narrow-completions-by-type ()
"Restrict bookmark completions list to bookmarks of a given type."