From e88be49b9db51f36ef2b6b3fc6716cd02203775f Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 27 Oct 2021 06:05:39 +0200 Subject: [PATCH] image-dired: Add support for bookmark.el * lisp/image-dired.el (image-dired-thumbnail-mode): Add bookmark.el support. (bookmark-make-record-default, bookmark-prop-get): Declare. (image-dired-bookmark-name, image-dired-bookmark-make-record) (image-dired-bookmark-jump): New defuns. --- etc/NEWS | 6 ++++++ lisp/image-dired.el | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 1cb19ee888c..093c8ac9632 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -227,6 +227,12 @@ to use it; it is not enabled by default. Support for the GraphicsMagick command line tool ("gm") has been added, and is used instead of ImageMagick when it is available. +--- +*** Support for bookmark.el. +The command 'bookmark-set' (bound to 'C-x r m') is now supported in +the thumbnail view, and will create a bookmark that opens the current +directory in Image-Dired. + ** Dired --- diff --git a/lisp/image-dired.el b/lisp/image-dired.el index 53cc8678948..d089d4a26d9 100644 --- a/lisp/image-dired.el +++ b/lisp/image-dired.el @@ -1766,7 +1766,8 @@ You probably want to use this together with "Browse and manipulate thumbnail images using dired. Use `image-dired-minor-mode' to get a nice setup." (buffer-disable-undo) - (add-hook 'file-name-at-point-functions 'image-dired-file-name-at-point nil t)) + (add-hook 'file-name-at-point-functions 'image-dired-file-name-at-point nil t) + (setq-local bookmark-make-record-function #'image-dired-bookmark-make-record)) (define-derived-mode image-dired-display-image-mode special-mode "image-dired-image-display" @@ -2815,6 +2816,38 @@ tags to their respective image file. Internal function used by (dolist (tag tag-list) (push (cons file tag) lst)))))) + +;;;; bookmark.el support + +(declare-function bookmark-make-record-default + "bookmark" (&optional no-file no-context posn)) +(declare-function bookmark-prop-get "bookmark" (bookmark prop)) + +(defun image-dired-bookmark-name () + "Create a default bookmark name for the current EWW buffer." + (file-name-nondirectory + (directory-file-name + (file-name-directory (image-dired-original-file-name))))) + +(defun image-dired-bookmark-make-record () + "Create a bookmark for the current EWW buffer." + `(,(image-dired-bookmark-name) + ,@(bookmark-make-record-default t) + (location . ,(file-name-directory (image-dired-original-file-name))) + (image-dired-file . ,(file-name-nondirectory (image-dired-original-file-name))) + (handler . image-dired-bookmark-jump))) + +;;;###autoload +(defun image-dired-bookmark-jump (bookmark) + "Default bookmark handler for Image-Dired buffers." + ;; User already cached thumbnails, so disable any checking. + (let ((image-dired-show-all-from-dir-max-files most-positive-fixnum)) + (image-dired (bookmark-prop-get bookmark 'location)) + ;; TODO: Go to the bookmarked file, if it exists. + ;; (bookmark-prop-get bookmark 'image-dired-file) + (goto-char (point-min)))) + + ;;;; Obsolete ;;;###autoload -- 2.39.2