• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/

Lines Matching +refs:dired +refs:unmark

1 ;;; image-dired.el --- use dired to browse and manipulate your images
38 ;; `dired' to do it. It would allow me to do almost anything I wanted,
40 ;; letting me manipulate and tag them in various ways. `dired' already
48 ;; browsing the thumbnail buffer was slow too. image-dired.el will not
50 ;; quickly and easily in dired. I copied a great deal of ideas and
53 ;; `image-dired' stores the thumbnail files in `image-dired-dir'
55 ;; ~/.emacs.d/image-dired/myimage01.thumb.jpg. The "database" is for
70 ;; * For `image-dired-get-exif-data' and `image-dired-write-exif-data' to work,
74 ;; using `image-dired-thumbnail-set-image-description' and to create
75 ;; "unique" file names using `image-dired-get-exif-file-name' (used by
76 ;; `image-dired-copy-with-exif-file-name').
86 ;; Quickstart: M-x image-dired RET DIRNAME RET
97 ;; backup of `image-dired-db-file' when testing new versions.
120 ;; * From thumbs.el: Add image resizing, if useful (image-dired's automatic
128 ;; * Add `image-dired-display-thumbs-ring' and functions to cycle that. Find
131 ;; probably needs rewriting `image-dired-display-thumbs' to be more general.
134 ;; dired (for example, using C-n or <down> instead of C-S-n). Richard
135 ;; suggested that we could keep C-t as prefix for image-dired commands
136 ;; as it is currently not used in dired. He also suggested that
137 ;; `dired-next-line' and `dired-previous-line' figure out if
138 ;; image-dired is enabled in the current buffer and, if it is, call
139 ;; `image-dired-dired-next-line' and
140 ;; `image-dired-dired-previous-line', respectively. Update: This is
141 ;; partly done; some bindings have now been added to dired.
146 ;; * Rewrite `image-dired-modify-mark-on-thumb-original-file' to be
157 (require 'dired)
164 (defgroup image-dired nil
165 "Use dired to browse your images as thumbnails, and more."
166 :prefix "image-dired-"
169 (defcustom image-dired-dir "~/.emacs.d/image-dired/"
172 :group 'image-dired)
174 (defcustom image-dired-thumbnail-storage 'use-image-dired-dir
175 "How to store image-dired's thumbnail files.
177 controlled by this variable. \"Use image-dired dir\" means that the
180 \".image-dired\" in the same directory where the image file is.
186 (const :tag "Use image-dired-dir" use-image-dired-dir)
188 :group 'image-dired)
190 (defcustom image-dired-db-file "~/.emacs.d/image-dired/.image-dired_db"
193 :group 'image-dired)
195 (defcustom image-dired-temp-image-file "~/.emacs.d/image-dired/.image-dired_temp"
198 :group 'image-dired)
200 (defcustom image-dired-gallery-dir "~/.emacs.d/image-dired/.image-dired_gallery"
203 the index.html page that image-dired creates."
205 :group 'image-dired)
207 (defcustom image-dired-gallery-image-root-url
213 :group 'image-dired)
215 (defcustom image-dired-gallery-thumb-image-root-url
221 :group 'image-dired)
223 (defcustom image-dired-cmd-create-thumbnail-program
226 Used together with `image-dired-cmd-create-thumbnail-options'."
228 :group 'image-dired)
230 (defcustom image-dired-cmd-create-thumbnail-options
234 `image-dired-cmd-create-thumbnail-program', %w which is replaced by
235 `image-dired-thumb-width', %h which is replaced by `image-dired-thumb-height',
239 :group 'image-dired)
241 (defcustom image-dired-cmd-create-temp-image-program
244 Used together with `image-dired-cmd-create-temp-image-options'."
246 :group 'image-dired)
248 (defcustom image-dired-cmd-create-temp-image-options
252 `image-dired-cmd-create-temp-image-program', %w and %h which is replaced by
257 :group 'image-dired)
259 (defcustom image-dired-cmd-pngnq-program (executable-find "pngnq")
263 :group 'image-dired)
265 (defcustom image-dired-cmd-pngcrush-program (executable-find "pngcrush")
270 :group 'image-dired)
272 (defcustom image-dired-cmd-create-standard-thumbnail-command
274 image-dired-cmd-create-thumbnail-program " "
276 (unless (or image-dired-cmd-pngcrush-program image-dired-cmd-pngnq-program)
283 (if image-dired-cmd-pngnq-program
285 " ; " image-dired-cmd-pngnq-program " -f \"%t\""
286 (unless image-dired-cmd-pngcrush-program
288 (if image-dired-cmd-pngcrush-program
290 (unless image-dired-cmd-pngcrush-program
292 " ; " image-dired-cmd-pngcrush-program " -q "
305 :group 'image-dired)
307 (defcustom image-dired-cmd-rotate-thumbnail-program
310 Used together with `image-dired-cmd-rotate-thumbnail-options'."
312 :group 'image-dired)
314 (defcustom image-dired-cmd-rotate-thumbnail-options
318 `image-dired-cmd-rotate-thumbnail-program', %d which is replaced by the
323 :group 'image-dired)
325 (defcustom image-dired-cmd-rotate-original-program
328 Used together with `image-dired-cmd-rotate-original-options'."
330 :group 'image-dired)
332 (defcustom image-dired-cmd-rotate-original-options
336 `image-dired-cmd-rotate-original-program', %d which is replaced by the
340 `image-dired-temp-image-file'."
342 :group 'image-dired)
344 (defcustom image-dired-temp-rotate-image-file
345 "~/.emacs.d/image-dired/.image-dired_rotate_temp"
348 :group 'image-dired)
350 (defcustom image-dired-rotate-original-ask-before-overwrite t
353 original file with `image-dired-temp-rotate-image-file'."
355 :group 'image-dired)
357 (defcustom image-dired-cmd-write-exif-data-program
360 Used together with `image-dired-cmd-write-exif-data-options'."
362 :group 'image-dired)
364 (defcustom image-dired-cmd-write-exif-data-options
368 `image-dired-cmd-write-exif-data-program', %f which is replaced by the
372 :group 'image-dired)
374 (defcustom image-dired-cmd-read-exif-data-program
377 Used together with `image-dired-cmd-read-exif-data-program-options'."
379 :group 'image-dired)
381 (defcustom image-dired-cmd-read-exif-data-options
385 `image-dired-cmd-write-exif-data-options', %f which is replaced
388 :group 'image-dired)
390 (defcustom image-dired-gallery-hidden-tags
393 Used by `image-dired-gallery-generate' to leave out \"hidden\" images."
395 :group 'image-dired)
397 (defcustom image-dired-thumb-size (if (eq 'standard image-dired-thumbnail-storage) 128 100)
399 This is the default size for both `image-dired-thumb-width' and `image-dired-thumb-height'."
401 :group 'image-dired)
403 (defcustom image-dired-thumb-width image-dired-thumb-size
406 :group 'image-dired)
408 (defcustom image-dired-thumb-height image-dired-thumb-size
411 :group 'image-dired)
413 (defcustom image-dired-thumb-relief 2
416 :group 'image-dired)
418 (defcustom image-dired-thumb-margin 2
422 :group 'image-dired)
424 (defcustom image-dired-line-up-method 'dynamic
426 Used by `image-dired-display-thumbs' and other functions that needs to
429 `image-dired-thumbs-per-row', Interactive is for asking the user, and No
436 :group 'image-dired)
438 (defcustom image-dired-thumbs-per-row 3
441 :group 'image-dired)
443 (defcustom image-dired-display-window-width-correction 1
448 :group 'image-dired)
450 (defcustom image-dired-display-window-height-correction 0
455 :group 'image-dired)
457 (defcustom image-dired-track-movement t
460 `image-dired-toggle-movement-tracking'."
462 :group 'image-dired)
464 (defcustom image-dired-append-when-browsing nil
466 If non-nil, using `image-dired-next-line-and-display' and
467 `image-dired-previous-line-and-display' will leave a trail of thumbnail
470 just call `image-dired-display-thumb' to display only the image at point.
471 This value can be toggled using `image-dired-toggle-append-browsing'."
473 :group 'image-dired)
475 (defcustom image-dired-dired-disp-props t
476 "If non-nil, display properties for dired file when browsing.
477 Used by `image-dired-next-line-and-display',
478 `image-dired-previous-line-and-display' and `image-dired-mark-and-display-next'.
480 dired and you might want to turn it off."
482 :group 'image-dired)
484 (defcustom image-dired-display-properties-format "%b: %f (%t): %c"
486 %b is replaced with associated dired buffer name, %f with file name
490 :group 'image-dired)
492 (defcustom image-dired-external-viewer
493 ;; TODO: Use mailcap, dired-guess-shell-alist-default,
494 ;; dired-view-command-alist.
500 `image-dired-thumbnail-mode'."
502 :group 'image-dired)
504 (defcustom image-dired-main-image-directory "~/pics/"
506 Used by `image-dired-copy-with-exif-file-name'."
508 :group 'image-dired)
510 (defcustom image-dired-show-all-from-dir-max-files 50
511 "Maximum number of files to show using `image-dired-show-all-from-dir'.
514 :group 'image-dired)
516 (defun image-dired-dir ()
517 "Return the current thumbnails directory (from variable `image-dired-dir').
519 (let ((image-dired-dir (file-name-as-directory
520 (expand-file-name image-dired-dir))))
521 (unless (file-directory-p image-dired-dir)
522 (make-directory image-dired-dir t)
524 image-dired-dir))
526 (defun image-dired-insert-image (file type relief margin)
535 (defun image-dired-get-thumbnail-image (file)
539 (let ((thumb-file (image-dired-thumb-name file)))
543 (image-dired-create-thumb file thumb-file))
547 ;; :relief image-dired-thumb-relief :margin image-dired-thumb-margin)
550 (defun image-dired-insert-thumbnail (file original-file-name
551 associated-dired-buffer)
556 (image-dired-insert-image file
558 (if (eq 'standard image-dired-thumbnail-storage)
560 image-dired-thumb-relief
561 image-dired-thumb-margin)
565 (list 'image-dired-thumbnail t
567 'associated-dired-buffer associated-dired-buffer
568 'tags (image-dired-list-tags original-file-name)
570 'comment (image-dired-get-comment original-file-name)))))
572 (defun image-dired-thumb-name (file)
574 Depending on the value of `image-dired-thumbnail-storage', the file
580 (cond ((eq 'standard image-dired-thumbnail-storage)
584 ((eq 'use-image-dired-dir image-dired-thumbnail-storage)
593 (file-name-as-directory (expand-file-name (image-dired-dir)))
597 ((eq 'per-directory image-dired-thumbnail-storage)
599 (format "%s.image-dired/%s.thumb.%s"
604 (defun image-dired-create-thumb (original-file thumbnail-file)
606 (let* ((width (int-to-string image-dired-thumb-width))
607 (height (int-to-string image-dired-thumb-height))
614 (if (eq 'standard image-dired-thumbnail-storage)
615 image-dired-cmd-create-standard-thumbnail-command
616 image-dired-cmd-create-thumbnail-options)
618 (cons ?p image-dired-cmd-create-thumbnail-program)
633 (defun image-dired-dired-insert-marked-thumbs ()
634 "Insert thumbnails before file names of marked files in the dired buffer."
636 (dired-map-over-marks
637 (let* ((image-pos (dired-move-to-filename))
638 (image-file (dired-get-filename))
639 (thumb-file (image-dired-get-thumbnail-image image-file))
653 (add-hook 'dired-after-readin-hook 'image-dired-dired-after-readin-hook nil t))
655 (defun image-dired-dired-after-readin-hook ()
656 "Relocate existing thumbnail overlays in dired buffer after reverting.
662 (image-pos (dired-goto-file image-file)))
668 (defun image-dired-next-line-and-display ()
669 "Move to next dired line and display thumbnail image."
671 (dired-next-line 1)
672 (image-dired-display-thumbs
673 t (or image-dired-append-when-browsing nil) t)
674 (if image-dired-dired-disp-props
675 (image-dired-dired-display-properties)))
677 (defun image-dired-previous-line-and-display ()
678 "Move to previous dired line and display thumbnail image."
680 (dired-previous-line 1)
681 (image-dired-display-thumbs
682 t (or image-dired-append-when-browsing nil) t)
683 (if image-dired-dired-disp-props
684 (image-dired-dired-display-properties)))
686 (defun image-dired-toggle-append-browsing ()
687 "Toggle `image-dired-append-when-browsing'."
689 (setq image-dired-append-when-browsing
690 (not image-dired-append-when-browsing))
692 (if image-dired-append-when-browsing
696 (defun image-dired-mark-and-display-next ()
697 "Mark current file in dired and display next thumbnail image."
699 (dired-mark 1)
700 (image-dired-display-thumbs
701 t (or image-dired-append-when-browsing nil) t)
702 (if image-dired-dired-disp-props
703 (image-dired-dired-display-properties)))
705 (defun image-dired-toggle-dired-display-properties ()
706 "Toggle `image-dired-dired-disp-props'."
708 (setq image-dired-dired-disp-props
709 (not image-dired-dired-disp-props))
711 (if image-dired-dired-disp-props
715 (defvar image-dired-thumbnail-buffer "*image-dired*"
718 (defun image-dired-create-thumbnail-buffer ()
719 "Create thumb buffer and set `image-dired-thumbnail-mode'."
720 (let ((buf (get-buffer-create image-dired-thumbnail-buffer)))
723 (if (not (eq major-mode 'image-dired-thumbnail-mode))
724 (image-dired-thumbnail-mode)))
727 (defvar image-dired-display-image-buffer "*image-dired-display-image*"
730 (defun image-dired-create-display-image-buffer ()
731 "Create image display buffer and set `image-dired-display-image-mode'."
732 (let ((buf (get-buffer-create image-dired-display-image-buffer)))
735 (if (not (eq major-mode 'image-dired-display-image-mode))
736 (image-dired-display-image-mode)))
739 (defvar image-dired-saved-window-configuration nil
743 (defun image-dired-dired-with-window-configuration (dir &optional arg)
748 - Opens dired in folder DIR
753 image files in dired and type
754 \\[image-dired-display-thumbs] (`image-dired-display-thumbs').
759 calling `image-dired-restore-window-configuration'."
761 (let ((buf (image-dired-create-thumbnail-buffer))
762 (buf2 (image-dired-create-display-image-buffer)))
763 (setq image-dired-saved-window-configuration
765 (dired dir)
778 (defun image-dired-restore-window-configuration ()
781 `image-dired-dired-with-window-configuration'."
783 (if image-dired-saved-window-configuration
784 (set-window-configuration image-dired-saved-window-configuration)
788 (defun image-dired-display-thumbs (&optional arg append do-not-pop)
789 "Display thumbnails of all marked files, in `image-dired-thumbnail-buffer'.
796 you have the dired buffer in the left window and the
797 `image-dired-thumbnail-buffer' buffer in the right window.
805 `image-dired-next-line-and-display' and
806 `image-dired-previous-line-and-display' where we do not want the
809 (let ((buf (image-dired-create-thumbnail-buffer))
810 curr-file thumb-name files count dired-buf beg)
812 (setq files (list (dired-get-filename)))
813 (setq files (dired-get-marked-files)))
814 (setq dired-buf (current-buffer))
822 (setq thumb-name (image-dired-thumb-name curr-file))
824 (not (= 0 (image-dired-create-thumb curr-file thumb-name))))
826 (image-dired-insert-thumbnail thumb-name curr-file dired-buf)))
828 (cond ((eq 'dynamic image-dired-line-up-method)
829 (image-dired-line-up-dynamic))
830 ((eq 'fixed image-dired-line-up-method)
831 (image-dired-line-up))
832 ((eq 'interactive image-dired-line-up-method)
833 (image-dired-line-up-interactive))
834 ((eq 'none image-dired-line-up-method)
837 (image-dired-line-up-dynamic))))
839 (display-buffer image-dired-thumbnail-buffer)
840 (pop-to-buffer image-dired-thumbnail-buffer))))
843 (defun image-dired-show-all-from-dir (dir)
846 exceeds `image-dired-show-all-from-dir-max-files', a warning will be
849 (dired dir)
850 (dired-mark-files-regexp (image-file-name-regexp))
851 (let ((files (dired-get-marked-files)))
852 (if (or (<= (length files) image-dired-show-all-from-dir-max-files)
853 (and (> (length files) image-dired-show-all-from-dir-max-files)
857 image-dired-show-all-from-dir-max-files))))
859 (image-dired-display-thumbs)
860 (pop-to-buffer image-dired-thumbnail-buffer))
864 (defalias 'image-dired 'image-dired-show-all-from-dir)
867 (defalias 'tumme 'image-dired-show-all-from-dir)
869 (defun image-dired-write-tags (file-tags)
875 (with-temp-file image-dired-db-file
876 (insert-file-contents image-dired-db-file)
891 (defun image-dired-remove-tag (files tag)
895 (setq buf (find-file image-dired-db-file))
925 (defun image-dired-list-tags (file)
929 (setq buf (find-file image-dired-db-file))
945 (defun image-dired-tag-files (arg)
946 "Tag marked file(s) in dired. With prefix ARG, tag file at point."
951 (setq files (list (dired-get-filename)))
952 (setq files (dired-get-marked-files)))
953 (image-dired-write-tags
959 (defun image-dired-tag-thumbnail ()
963 (image-dired-write-tags (list (cons (image-dired-original-file-name) tag))))
964 (image-dired-update-property
965 'tags (image-dired-list-tags (image-dired-original-file-name))))
968 (defun image-dired-delete-tag (arg)
975 (setq files (list (dired-get-filename)))
976 (setq files (dired-get-marked-files)))
977 (image-dired-remove-tag files tag)))
979 (defun image-dired-tag-thumbnail-remove ()
983 (image-dired-remove-tag (image-dired-original-file-name) tag))
984 (image-dired-update-property
985 'tags (image-dired-list-tags (image-dired-original-file-name))))
987 (defun image-dired-original-file-name ()
991 (defun image-dired-associated-dired-buffer ()
992 "Get associated dired buffer at point."
993 (get-text-property (point) 'associated-dired-buffer))
995 (defun image-dired-get-buffer-window (buf)
1002 (defun image-dired-track-original-file ()
1003 "Track the original file in the associated dired buffer.
1004 See documentation for `image-dired-toggle-movement-tracking'. Interactive
1005 use only useful if `image-dired-track-movement' is nil."
1008 (dired-buf (image-dired-associated-dired-buffer))
1009 (file-name (image-dired-original-file-name)))
1010 (when (and (buffer-live-p dired-buf) file-name)
1012 (set-buffer dired-buf)
1016 (dired-move-to-filename)
1018 (image-dired-get-buffer-window dired-buf) (point)))
1021 (defun image-dired-toggle-movement-tracking ()
1022 "Turn on and off `image-dired-track-movement'.
1023 Tracking of the movements between thumbnail and dired buffer so that
1024 they are \"mirrored\" in the dired buffer. When this is on, moving
1025 around in the thumbnail or dired buffer will find the matching
1028 (setq image-dired-track-movement (not image-dired-track-movement))
1029 (message "Tracking %s" (if image-dired-track-movement "on" "off")))
1031 (defun image-dired-track-thumbnail ()
1032 "Track current dired file's thumb in `image-dired-thumbnail-buffer'.
1033 This is almost the same as what `image-dired-track-original-file' does, but
1035 (let ((file (dired-get-filename))
1038 (when (get-buffer image-dired-thumbnail-buffer)
1039 (set-buffer image-dired-thumbnail-buffer)
1051 (image-dired-thumbnail-window) (point))
1052 (image-dired-display-thumb-properties))
1055 (defun image-dired-dired-next-line (&optional arg)
1056 "Call `dired-next-line', then track thumbnail.
1057 This can safely replace `dired-next-line'. With prefix argument, move
1060 (dired-next-line (or arg 1))
1061 (if image-dired-track-movement
1062 (image-dired-track-thumbnail)))
1064 (defun image-dired-dired-previous-line (&optional arg)
1065 "Call `dired-previous-line', then track thumbnail.
1066 This can safely replace `dired-previous-line'. With prefix argument,
1069 (dired-previous-line (or arg 1))
1070 (if image-dired-track-movement
1071 (image-dired-track-thumbnail)))
1073 (defun image-dired-forward-image (&optional arg)
1084 (not (image-dired-image-at-point-p)))
1087 (image-dired-image-at-point-p)))
1090 (when image-dired-track-movement
1091 (image-dired-track-original-file))
1092 (image-dired-display-thumb-properties))
1094 (defun image-dired-backward-image (&optional arg)
1105 (not (image-dired-image-at-point-p)))
1108 (image-dired-image-at-point-p)))
1111 (when image-dired-track-movement
1112 (image-dired-track-original-file))
1113 (image-dired-display-thumb-properties))
1115 (defun image-dired-next-line ()
1120 (if (not (image-dired-image-at-point-p))
1121 (image-dired-backward-image))
1122 (if image-dired-track-movement
1123 (image-dired-track-original-file))
1124 (image-dired-display-thumb-properties))
1127 (defun image-dired-previous-line ()
1135 (if (not (image-dired-image-at-point-p))
1136 (image-dired-backward-image))
1137 (if image-dired-track-movement
1138 (image-dired-track-original-file))
1139 (image-dired-display-thumb-properties))
1141 (defun image-dired-format-properties-string (buf file props comment)
1143 BUF is the associated dired buffer, FILE is the original image file
1147 image-dired-display-properties-format
1154 (defun image-dired-display-thumb-properties ()
1157 (let ((file-name (file-name-nondirectory (image-dired-original-file-name)))
1158 (dired-buf (buffer-name (image-dired-associated-dired-buffer)))
1166 (image-dired-format-properties-string
1167 dired-buf
1172 (defun image-dired-dired-file-marked-p ()
1178 (defun image-dired-modify-mark-on-thumb-original-file (command)
1179 "Modify mark in dired buffer.
1181 way. COMMAND is one of 'mark for marking file in dired, 'unmark for
1182 unmarking file in dired or 'flag for flagging file for delete in
1183 dired."
1184 (let ((file-name (image-dired-original-file-name))
1185 (dired-buf (image-dired-associated-dired-buffer)))
1186 (if (not (and dired-buf file-name))
1188 (with-current-buffer dired-buf
1193 (cond ((eq command 'mark) (dired-mark 1))
1194 ((eq command 'unmark) (dired-unmark 1))
1196 (if (image-dired-dired-file-marked-p)
1197 (dired-unmark 1)
1198 (dired-mark 1)))
1199 ((eq command 'flag) (dired-flag-file-deletion 1))))))))
1201 (defun image-dired-mark-thumb-original-file ()
1202 "Mark original image file in associated dired buffer."
1204 (image-dired-modify-mark-on-thumb-original-file 'mark)
1205 (image-dired-forward-image))
1207 (defun image-dired-unmark-thumb-original-file ()
1208 "Unmark original image file in associated dired buffer."
1210 (image-dired-modify-mark-on-thumb-original-file 'unmark)
1211 (image-dired-forward-image))
1213 (defun image-dired-flag-thumb-original-file ()
1214 "Flag original image file for deletion in associated dired buffer."
1216 (image-dired-modify-mark-on-thumb-original-file 'flag)
1217 (image-dired-forward-image))
1219 (defun image-dired-toggle-mark-thumb-original-file ()
1220 "Toggle mark on original image file in associated dired buffer."
1222 (image-dired-modify-mark-on-thumb-original-file 'toggle))
1224 (defun image-dired-jump-original-dired-buffer ()
1225 "Jump to the dired buffer associated with the current image file.
1227 `image-dired-track-original-file'."
1229 (let ((buf (image-dired-associated-dired-buffer))
1231 (setq window (image-dired-get-buffer-window buf))
1237 (message "Associated dired buffer not visible"))))
1240 (defun image-dired-jump-thumbnail-buffer ()
1243 (let ((window (image-dired-thumbnail-window))
1252 (defvar image-dired-thumbnail-mode-map (make-sparse-keymap)
1253 "Keymap for `image-dired-thumbnail-mode'.")
1255 (defvar image-dired-thumbnail-mode-line-up-map (make-sparse-keymap)
1256 "Keymap for line-up commands in `image-dired-thumbnail-mode'.")
1258 (defvar image-dired-thumbnail-mode-tag-map (make-sparse-keymap)
1259 "Keymap for tag commands in `image-dired-thumbnail-mode'.")
1261 (defun image-dired-define-thumbnail-mode-keymap ()
1262 "Define keymap for `image-dired-thumbnail-mode'."
1265 (define-key image-dired-thumbnail-mode-map [right] 'image-dired-forward-image)
1266 (define-key image-dired-thumbnail-mode-map [left] 'image-dired-backward-image)
1267 (define-key image-dired-thumbnail-mode-map [up] 'image-dired-previous-line)
1268 (define-key image-dired-thumbnail-mode-map [down] 'image-dired-next-line)
1269 (define-key image-dired-thumbnail-mode-map "\C-f" 'image-dired-forward-image)
1270 (define-key image-dired-thumbnail-mode-map "\C-b" 'image-dired-backward-image)
1271 (define-key image-dired-thumbnail-mode-map "\C-p" 'image-dired-previous-line)
1272 (define-key image-dired-thumbnail-mode-map "\C-n" 'image-dired-next-line)
1274 (define-key image-dired-thumbnail-mode-map "d" 'image-dired-flag-thumb-original-file)
1275 (define-key image-dired-thumbnail-mode-map [delete]
1276 'image-dired-flag-thumb-original-file)
1277 (define-key image-dired-thumbnail-mode-map "m" 'image-dired-mark-thumb-original-file)
1278 (define-key image-dired-thumbnail-mode-map "u" 'image-dired-unmark-thumb-original-file)
1279 (define-key image-dired-thumbnail-mode-map "." 'image-dired-track-original-file)
1280 (define-key image-dired-thumbnail-mode-map [tab] 'image-dired-jump-original-dired-buffer)
1283 (define-key image-dired-thumbnail-mode-map "g" image-dired-thumbnail-mode-line-up-map)
1286 (define-key image-dired-thumbnail-mode-line-up-map "g" 'image-dired-line-up-dynamic)
1288 (define-key image-dired-thumbnail-mode-line-up-map "f" 'image-dired-line-up)
1290 (define-key image-dired-thumbnail-mode-line-up-map "i" 'image-dired-line-up-interactive)
1293 (define-key image-dired-thumbnail-mode-map "t" image-dired-thumbnail-mode-tag-map)
1296 (define-key image-dired-thumbnail-mode-tag-map "t" 'image-dired-tag-thumbnail)
1298 (define-key image-dired-thumbnail-mode-tag-map "r" 'image-dired-tag-thumbnail-remove)
1300 (define-key image-dired-thumbnail-mode-map "\C-m"
1301 'image-dired-display-thumbnail-original-image)
1302 (define-key image-dired-thumbnail-mode-map [C-return]
1303 'image-dired-thumbnail-display-external)
1305 (define-key image-dired-thumbnail-mode-map "l" 'image-dired-rotate-thumbnail-left)
1306 (define-key image-dired-thumbnail-mode-map "r" 'image-dired-rotate-thumbnail-right)
1308 (define-key image-dired-thumbnail-mode-map "L" 'image-dired-rotate-original-left)
1309 (define-key image-dired-thumbnail-mode-map "R" 'image-dired-rotate-original-right)
1311 (define-key image-dired-thumbnail-mode-map "D"
1312 'image-dired-thumbnail-set-image-description)
1314 (define-key image-dired-thumbnail-mode-map "\C-d" 'image-dired-delete-char)
1315 (define-key image-dired-thumbnail-mode-map " "
1316 'image-dired-display-next-thumbnail-original)
1317 (define-key image-dired-thumbnail-mode-map
1318 (kbd "DEL") 'image-dired-display-previous-thumbnail-original)
1319 (define-key image-dired-thumbnail-mode-map "c" 'image-dired-comment-thumbnail)
1320 (define-key image-dired-thumbnail-mode-map "q" 'image-dired-kill-buffer-and-window)
1323 (define-key image-dired-thumbnail-mode-map [mouse-2] 'image-dired-mouse-display-image)
1324 (define-key image-dired-thumbnail-mode-map [mouse-1] 'image-dired-mouse-select-thumbnail)
1328 ;; C-down-mouse-1 to `image-dired-mouse-toggle-mark', I get a message
1332 (define-key image-dired-thumbnail-mode-map [C-down-mouse-1] 'undefined)
1333 (define-key image-dired-thumbnail-mode-map [C-mouse-1] 'image-dired-mouse-toggle-mark)
1336 (define-key image-dired-thumbnail-mode-map [menu-bar image-dired]
1339 (define-key image-dired-thumbnail-mode-map
1340 [menu-bar image-dired image-dired-kill-buffer-and-window]
1341 '("Quit" . image-dired-kill-buffer-and-window))
1343 (define-key image-dired-thumbnail-mode-map
1344 [menu-bar image-dired image-dired-delete-char]
1345 '("Delete thumbnail from buffer" . image-dired-delete-char))
1347 (define-key image-dired-thumbnail-mode-map
1348 [menu-bar image-dired image-dired-tag-thumbnail-remove]
1349 '("Remove tag from thumbnail" . image-dired-tag-thumbnail-remove))
1351 (define-key image-dired-thumbnail-mode-map
1352 [menu-bar image-dired image-dired-tag-thumbnail]
1353 '("Tag thumbnail" . image-dired-tag-thumbnail))
1355 (define-key image-dired-thumbnail-mode-map
1356 [menu-bar image-dired image-dired-comment-thumbnail]
1357 '("Comment thumbnail" . image-dired-comment-thumbnail))
1359 (define-key image-dired-thumbnail-mode-map
1360 [menu-bar image-dired image-dired-refresh-thumb]
1361 '("Refresh thumb" . image-dired-refresh-thumb))
1362 (define-key image-dired-thumbnail-mode-map
1363 [menu-bar image-dired image-dired-line-up-dynamic]
1364 '("Dynamic line up" . image-dired-line-up-dynamic))
1365 (define-key image-dired-thumbnail-mode-map
1366 [menu-bar image-dired image-dired-line-up]
1367 '("Line up thumbnails" . image-dired-line-up))
1369 (define-key image-dired-thumbnail-mode-map
1370 [menu-bar image-dired image-dired-rotate-thumbnail-left]
1371 '("Rotate thumbnail left" . image-dired-rotate-thumbnail-left))
1372 (define-key image-dired-thumbnail-mode-map
1373 [menu-bar image-dired image-dired-rotate-thumbnail-right]
1374 '("Rotate thumbnail right" . image-dired-rotate-thumbnail-right))
1376 (define-key image-dired-thumbnail-mode-map
1377 [menu-bar image-dired image-dired-rotate-original-left]
1378 '("Rotate original left" . image-dired-rotate-original-left))
1379 (define-key image-dired-thumbnail-mode-map
1380 [menu-bar image-dired image-dired-rotate-original-right]
1381 '("Rotate original right" . image-dired-rotate-original-right))
1383 (define-key image-dired-thumbnail-mode-map
1384 [menu-bar image-dired image-dired-toggle-movement-tracking]
1385 '("Toggle movement tracking on/off" . image-dired-toggle-movement-tracking))
1387 (define-key image-dired-thumbnail-mode-map
1388 [menu-bar image-dired image-dired-jump-original-dired-buffer]
1389 '("Jump to dired buffer" . image-dired-jump-original-dired-buffer))
1390 (define-key image-dired-thumbnail-mode-map
1391 [menu-bar image-dired image-dired-track-original-file]
1392 '("Track original" . image-dired-track-original-file))
1394 (define-key image-dired-thumbnail-mode-map
1395 [menu-bar image-dired image-dired-flag-thumb-original-file]
1396 '("Flag original for deletion" . image-dired-flag-thumb-original-file))
1397 (define-key image-dired-thumbnail-mode-map
1398 [menu-bar image-dired image-dired-unmark-thumb-original-file]
1399 '("Unmark original" . image-dired-unmark-thumb-original-file))
1400 (define-key image-dired-thumbnail-mode-map
1401 [menu-bar image-dired image-dired-mark-thumb-original-file]
1402 '("Mark original" . image-dired-mark-thumb-original-file))
1404 (define-key image-dired-thumbnail-mode-map
1405 [menu-bar image-dired image-dired-thumbnail-display-external]
1406 '("Display in external viewer" . image-dired-thumbnail-display-external))
1407 (define-key image-dired-thumbnail-mode-map
1408 [menu-bar image-dired image-dired-display-thumbnail-original-image]
1409 '("Display image" . image-dired-display-thumbnail-original-image)))
1411 (defvar image-dired-display-image-mode-map (make-sparse-keymap)
1412 "Keymap for `image-dired-display-image-mode'.")
1414 (defun image-dired-define-display-image-mode-keymap ()
1415 "Define keymap for `image-dired-display-image-mode'."
1418 (define-key image-dired-display-image-mode-map "q" 'image-dired-kill-buffer-and-window)
1420 (define-key image-dired-display-image-mode-map "f"
1421 'image-dired-display-current-image-full)
1423 (define-key image-dired-display-image-mode-map "s"
1424 'image-dired-display-current-image-sized)
1427 (define-key image-dired-display-image-mode-map [menu-bar image-dired]
1430 (define-key image-dired-display-image-mode-map
1431 [menu-bar image-dired image-dired-kill-buffer-and-window]
1432 '("Quit" . image-dired-kill-buffer-and-window))
1434 (define-key image-dired-display-image-mode-map
1435 [menu-bar image-dired image-dired-display-current-image-sized]
1436 '("Display original, sized to fit" . image-dired-display-current-image-sized))
1438 (define-key image-dired-display-image-mode-map
1439 [menu-bar image-dired image-dired-display-current-image-full]
1440 '("Display original, full size" . image-dired-display-current-image-full))
1444 (defun image-dired-display-current-image-full ()
1447 (let ((file (image-dired-original-file-name)))
1450 (image-dired-display-image file t)
1454 (defun image-dired-display-current-image-sized ()
1457 (let ((file (image-dired-original-file-name)))
1460 (image-dired-display-image file)
1464 (define-derived-mode image-dired-thumbnail-mode
1465 fundamental-mode "image-dired-thumbnail"
1466 "Browse and manipulate thumbnail images using dired.
1467 Use `image-dired-dired' and `image-dired-setup-dired-keybindings' to get a
1469 (image-dired-define-thumbnail-mode-keymap)
1470 (message "image-dired-thumbnail-mode enabled"))
1472 (define-derived-mode image-dired-display-image-mode
1473 fundamental-mode "image-dired-image-display"
1476 (image-dired-define-display-image-mode-keymap)
1477 (message "image-dired-display-image-mode enabled"))
1480 (defun image-dired-setup-dired-keybindings ()
1481 "Setup easy-to-use keybindings for the commands to be used in dired mode.
1483 `image-dired-dired-x-line'."
1489 (define-key dired-mode-map "p" 'image-dired-dired-previous-line)
1490 (define-key dired-mode-map "n" 'image-dired-dired-next-line)
1491 (define-key dired-mode-map [up] 'image-dired-dired-previous-line)
1492 (define-key dired-mode-map [down] 'image-dired-dired-next-line)
1494 (define-key dired-mode-map (kbd "C-S-n") 'image-dired-next-line-and-display)
1495 (define-key dired-mode-map (kbd "C-S-p") 'image-dired-previous-line-and-display)
1496 (define-key dired-mode-map (kbd "C-S-m") 'image-dired-mark-and-display-next)
1498 (define-key dired-mode-map "\C-td" 'image-dired-display-thumbs)
1499 (define-key dired-mode-map "\C-tt" 'image-dired-tag-files)
1500 (define-key dired-mode-map "\C-tr" 'image-dired-delete-tag)
1501 (define-key dired-mode-map [tab] 'image-dired-jump-thumbnail-buffer)
1502 (define-key dired-mode-map "\C-ti" 'image-dired-dired-display-image)
1503 (define-key dired-mode-map "\C-tx" 'image-dired-dired-display-external)
1504 (define-key dired-mode-map "\C-ta" 'image-dired-display-thumbs-append)
1505 (define-key dired-mode-map "\C-t." 'image-dired-display-thumb)
1506 (define-key dired-mode-map "\C-tc" 'image-dired-dired-comment-files)
1507 (define-key dired-mode-map "\C-tf" 'image-dired-mark-tagged-files)
1509 ;; Menu for dired
1510 (define-key dired-mode-map [menu-bar image-dired]
1513 (define-key dired-mode-map [menu-bar image-dired image-dired-copy-with-exif-file-name]
1514 '("Copy with EXIF file name" . image-dired-copy-with-exif-file-name))
1516 (define-key dired-mode-map [menu-bar image-dired image-dired-dired-comment-files]
1517 '("Comment files" . image-dired-dired-comment-files))
1519 (define-key dired-mode-map [menu-bar image-dired image-dired-mark-tagged-files]
1520 '("Mark tagged files" . image-dired-mark-tagged-files))
1522 (define-key dired-mode-map [menu-bar image-dired image-dired-delete-tag]
1523 '("Remove tag from files" . image-dired-delete-tag))
1525 (define-key dired-mode-map [menu-bar image-dired image-dired-tag-files]
1526 '("Tag files" . image-dired-tag-files))
1528 (define-key dired-mode-map [menu-bar image-dired image-dired-jump-thumbnail-buffer]
1529 '("Jump to thumbnail buffer" . image-dired-jump-thumbnail-buffer))
1531 (define-key dired-mode-map [menu-bar image-dired image-dired-toggle-movement-tracking]
1532 '("Toggle movement tracking" . image-dired-toggle-movement-tracking))
1534 (define-key dired-mode-map
1535 [menu-bar image-dired image-dired-toggle-append-browsing]
1536 '("Toggle append browsing" . image-dired-toggle-append-browsing))
1538 (define-key dired-mode-map
1539 [menu-bar image-dired image-dired-toggle-disp-props]
1540 '("Toggle display properties" . image-dired-toggle-dired-display-properties))
1542 (define-key dired-mode-map
1543 [menu-bar image-dired image-dired-dired-display-external]
1544 '("Display in external viewer" . image-dired-dired-display-external))
1545 (define-key dired-mode-map
1546 [menu-bar image-dired image-dired-dired-display-image]
1547 '("Display image" . image-dired-dired-display-image))
1548 (define-key dired-mode-map
1549 [menu-bar image-dired image-dired-display-thumb]
1550 '("Display this thumbnail" . image-dired-display-thumb))
1551 (define-key dired-mode-map
1552 [menu-bar image-dired image-dired-display-thumbs-append]
1553 '("Display thumbnails append" . image-dired-display-thumbs-append))
1554 (define-key dired-mode-map
1555 [menu-bar image-dired image-dired-display-thumbs]
1556 '("Display thumbnails" . image-dired-display-thumbs))
1558 (define-key dired-mode-map
1559 [menu-bar image-dired image-dired-create-thumbs]
1560 '("Create thumbnails for marked files" . image-dired-create-thumbs))
1562 (define-key dired-mode-map
1563 [menu-bar image-dired image-dired-mark-and-display-next]
1564 '("Mark and display next" . image-dired-mark-and-display-next))
1565 (define-key dired-mode-map
1566 [menu-bar image-dired image-dired-previous-line-and-display]
1567 '("Display thumb for previous file" . image-dired-previous-line-and-display))
1568 (define-key dired-mode-map
1569 [menu-bar image-dired image-dired-next-line-and-display]
1570 '("Display thumb for next file" . image-dired-next-line-and-display)))
1572 (defun image-dired-create-thumbs (&optional arg)
1573 "Create thumbnail images for all marked files in dired.
1578 (setq files (dired-get-marked-files))
1581 (setq thumb-name (image-dired-thumb-name curr-file))
1589 (if (not (= 0 (image-dired-create-thumb curr-file
1590 (image-dired-thumb-name curr-file))))
1594 (defvar image-dired-slideshow-timer nil
1597 (defvar image-dired-slideshow-count 0
1600 (defvar image-dired-slideshow-times 0
1603 (defun image-dired-slideshow-step ()
1604 "Step to next file, if `image-dired-slideshow-times' has not been reached."
1605 (if (< image-dired-slideshow-count image-dired-slideshow-times)
1607 (message "%s" (1+ image-dired-slideshow-count))
1608 (setq image-dired-slideshow-count (1+ image-dired-slideshow-count))
1609 (image-dired-next-line-and-display))
1610 (image-dired-slideshow-stop)))
1612 (defun image-dired-slideshow-start ()
1616 (setq image-dired-slideshow-count 0)
1617 (setq image-dired-slideshow-times (string-to-number (read-string "How many: ")))
1621 (setq image-dired-slideshow-timer
1624 'image-dired-slideshow-step))))
1626 (defun image-dired-slideshow-stop ()
1629 (cancel-timer image-dired-slideshow-timer))
1631 (defun image-dired-delete-char ()
1640 (defun image-dired-display-thumbs-append ()
1641 "Append thumbnails to `image-dired-thumbnail-buffer'."
1643 (image-dired-display-thumbs nil t t))
1646 (defun image-dired-display-thumb ()
1647 "Shorthand for `image-dired-display-thumbs' with prefix argument."
1649 (image-dired-display-thumbs t nil t))
1651 (defun image-dired-line-up ()
1652 "Line up thumbnails according to `image-dired-thumbs-per-row'.
1653 See also `image-dired-line-up-dynamic'."
1657 (while (and (not (image-dired-image-at-point-p))
1662 (while (and (not (image-dired-image-at-point-p))
1669 (if (= image-dired-thumbs-per-row 1)
1673 (when (and (= count (- image-dired-thumbs-per-row 1))
1680 (defun image-dired-line-up-dynamic ()
1685 (width (image-dired-window-width-pixels (image-dired-thumbnail-window)))
1686 (image-dired-thumbs-per-row
1688 (+ (* 2 image-dired-thumb-relief)
1689 (* 2 image-dired-thumb-margin)
1690 image-dired-thumb-width char-width))))
1691 (image-dired-line-up)))
1693 (defun image-dired-line-up-interactive ()
1697 (let ((image-dired-thumbs-per-row
1699 (if (not (> image-dired-thumbs-per-row 0))
1701 (image-dired-line-up))))
1703 (defun image-dired-thumbnail-display-external ()
1706 (let ((file (image-dired-original-file-name)))
1707 (if (not (image-dired-image-at-point-p))
1712 (format "%s \"%s\"" image-dired-external-viewer file))))))
1715 (defun image-dired-dired-display-external ()
1718 (let ((file (dired-get-filename)))
1720 (format "%s \"%s\"" image-dired-external-viewer file))))
1722 (defun image-dired-window-width-pixels (window)
1726 (defun image-dired-window-height-pixels (window)
1731 (defun image-dired-display-window ()
1732 "Return window where `image-dired-display-image-buffer' is visible."
1735 (equal (buffer-name (window-buffer window)) image-dired-display-image-buffer))
1738 (defun image-dired-thumbnail-window ()
1739 "Return window where `image-dired-thumbnail-buffer' is visible."
1742 (equal (buffer-name (window-buffer window)) image-dired-thumbnail-buffer))
1745 (defun image-dired-associated-dired-buffer-window ()
1746 "Return window where associated dired buffer is visible."
1748 (if (image-dired-image-at-point-p)
1750 (setq buf (image-dired-associated-dired-buffer))
1756 (defun image-dired-display-window-width ()
1757 "Return width, in pixels, of image-dired's image display window."
1758 (- (image-dired-window-width-pixels (image-dired-display-window))
1759 image-dired-display-window-width-correction))
1761 (defun image-dired-display-window-height ()
1762 "Return height, in pixels, of image-dired's image display window."
1763 (- (image-dired-window-height-pixels (image-dired-display-window))
1764 image-dired-display-window-height-correction))
1766 (defun image-dired-display-image (file &optional original-size)
1776 (let ((new-file (expand-file-name image-dired-temp-image-file))
1782 (setq width (image-dired-display-window-width))
1783 (setq height (image-dired-display-window-height))
1786 image-dired-cmd-create-temp-image-options
1788 (cons ?p image-dired-cmd-create-temp-image-program)
1799 (with-current-buffer (image-dired-create-display-image-buffer)
1803 (image-dired-insert-image image-dired-temp-image-file image-type 0 0)
1805 (image-dired-update-property 'original-file-name file)))))
1807 (defun image-dired-display-thumbnail-original-image (&optional arg)
1809 See documentation for `image-dired-display-image' for more information.
1812 (let ((file (image-dired-original-file-name)))
1813 (if (not (string-equal major-mode "image-dired-thumbnail-mode"))
1814 (message "Not in image-dired-thumbnail-mode")
1815 (if (not (image-dired-image-at-point-p))
1819 (image-dired-create-display-image-buffer)
1820 (display-buffer image-dired-display-image-buffer)
1821 (image-dired-display-image file arg))))))
1825 (defun image-dired-dired-display-image (&optional arg)
1827 See documentation for `image-dired-display-image' for more information.
1830 (image-dired-create-display-image-buffer)
1831 (display-buffer image-dired-display-image-buffer)
1832 (image-dired-display-image (dired-get-filename) arg))
1834 (defun image-dired-image-at-point-p ()
1835 "Return true if there is a image-dired thumbnail at point."
1836 (get-text-property (point) 'image-dired-thumbnail))
1838 (defun image-dired-rotate-thumbnail (degrees)
1840 (if (not (image-dired-image-at-point-p))
1842 (let ((file (image-dired-thumb-name (image-dired-original-file-name)))
1845 image-dired-cmd-rotate-thumbnail-options
1847 (cons ?p image-dired-cmd-rotate-thumbnail-program)
1855 (defun image-dired-rotate-thumbnail-left ()
1860 `image-dired-rotate-original-ask-before-overwrite'."
1862 (image-dired-rotate-thumbnail "270"))
1864 (defun image-dired-rotate-thumbnail-right ()
1869 `image-dired-rotate-original-ask-before-overwrite'."
1871 (image-dired-rotate-thumbnail "90"))
1873 (defun image-dired-refresh-thumb ()
1876 (let ((file (image-dired-original-file-name)))
1878 (image-dired-create-thumb file (image-dired-thumb-name file))))
1880 (defun image-dired-rotate-original (degrees)
1882 (if (not (image-dired-image-at-point-p))
1884 (let ((file (image-dired-original-file-name))
1889 image-dired-cmd-rotate-original-options
1891 (cons ?p image-dired-cmd-rotate-original-program)
1894 (cons ?t image-dired-temp-rotate-image-file))))
1898 (image-dired-display-image image-dired-temp-rotate-image-file)
1899 (if (or (and image-dired-rotate-original-ask-before-overwrite
1902 (not image-dired-rotate-original-ask-before-overwrite))
1904 (copy-file image-dired-temp-rotate-image-file file t)
1905 (image-dired-refresh-thumb))
1906 (image-dired-display-image file))))))
1908 (defun image-dired-rotate-original-left ()
1911 (image-dired-rotate-original "270"))
1913 (defun image-dired-rotate-original-right ()
1916 (image-dired-rotate-original "90"))
1918 (defun image-dired-get-exif-file-name (file)
1924 `image-dired-copy-with-exif-file-name'."
1933 (setq data (image-dired-get-exif-data (expand-file-name file)
1943 (defun image-dired-thumbnail-set-image-description ()
1948 (if (not (image-dired-image-at-point-p))
1950 (let* ((file (image-dired-original-file-name))
1951 (old-value (image-dired-get-exif-data file "ImageDescription")))
1953 (image-dired-set-exif-data file "ImageDescription"
1959 (defun image-dired-set-exif-data (file tag-name tag-value)
1963 image-dired-cmd-write-exif-data-options
1965 (cons ?p image-dired-cmd-write-exif-data-program)
1971 (defun image-dired-get-exif-data (file tag-name)
1973 (let ((buf (get-buffer-create "*image-dired-get-exif-data*"))
1976 image-dired-cmd-read-exif-data-options
1978 (cons ?p image-dired-cmd-read-exif-data-program)
1994 (defun image-dired-copy-with-exif-file-name ()
1996 Copy current or all marked files in dired to a new file in your
1998 `image-dired-get-exif-file-name'. A typical usage for this if when
2004 `image-dired-main-image-directory' called
2009 (files (dired-get-marked-files)))
2015 (expand-file-name image-dired-main-image-directory))
2016 (image-dired-get-exif-file-name curr-file)))
2021 (defun image-dired-display-next-thumbnail-original ()
2024 (image-dired-forward-image)
2025 (image-dired-display-thumbnail-original-image))
2027 (defun image-dired-display-previous-thumbnail-original ()
2030 (image-dired-backward-image)
2031 (image-dired-display-thumbnail-original-image))
2033 (defun image-dired-write-comments (file-comments)
2039 (with-temp-file image-dired-db-file
2040 (insert-file-contents image-dired-db-file)
2068 (defun image-dired-update-property (prop value)
2077 (defun image-dired-dired-comment-files ()
2078 "Add comment to current or marked files in dired."
2080 (let ((comment (image-dired-read-comment)))
2081 (image-dired-write-comments
2085 (dired-get-marked-files)))))
2087 (defun image-dired-comment-thumbnail ()
2090 (let* ((file (image-dired-original-file-name))
2091 (comment (image-dired-read-comment file)))
2092 (image-dired-write-comments (list (cons file comment)))
2093 (image-dired-update-property 'comment comment))
2094 (image-dired-display-thumb-properties))
2096 (defun image-dired-read-comment (&optional file)
2103 (if file (image-dired-get-comment file)))))
2106 (defun image-dired-get-comment (file)
2110 (setq buf (find-file image-dired-db-file))
2128 (defun image-dired-mark-tagged-files ()
2131 image file and stored in image-dired's database file. This command
2134 matching tags will be marked in the dired buffer."
2140 (setq buf (find-file image-dired-db-file))
2149 ;; I tried using `dired-mark-files-regexp' but it was
2162 (dired-mark 1))))
2166 (defun image-dired-mouse-display-image (event)
2167 "Use mouse EVENT, call `image-dired-display-image' to display image.
2168 Track this in associated dired buffer if `image-dired-track-movement' is
2174 (setq file (image-dired-original-file-name))
2175 (if image-dired-track-movement
2176 (image-dired-track-original-file))
2177 (image-dired-create-display-image-buffer)
2178 (display-buffer image-dired-display-image-buffer)
2179 (image-dired-display-image file)))
2181 (defun image-dired-mouse-select-thumbnail (event)
2183 Track this in associated dired buffer if `image-dired-track-movement' is
2189 (if image-dired-track-movement
2190 (image-dired-track-original-file)))
2191 (image-dired-display-thumb-properties))
2193 (defun image-dired-mouse-toggle-mark (event)
2194 "Use mouse EVENT to toggle dired mark for thumbnail.
2195 Track this in associated dired buffer if `image-dired-track-movement' is
2201 (if image-dired-track-movement
2202 (image-dired-track-original-file)))
2203 (image-dired-toggle-mark-thumb-original-file))
2205 (defun image-dired-dired-display-properties ()
2206 "Display properties for dired file in the echo area."
2208 (let* ((file (dired-get-filename))
2210 (dired-buf (buffer-name (current-buffer)))
2213 (image-dired-list-tags file)
2215 (comment (image-dired-get-comment file)))
2218 (image-dired-format-properties-string
2219 dired-buf
2224 (defvar image-dired-tag-file-list nil
2227 (defvar image-dired-file-tag-list nil
2230 (defvar image-dired-file-comment-list nil
2233 (defun image-dired-add-to-tag-file-list (tag file)
2236 (if image-dired-tag-file-list
2237 (if (setq curr (assoc tag image-dired-tag-file-list))
2240 (setcdr image-dired-tag-file-list
2241 (cons (list tag file) (cdr image-dired-tag-file-list))))
2242 (setq image-dired-tag-file-list (list (list tag file))))))
2244 (defun image-dired-add-to-tag-file-lists (tag file)
2245 "Helper function used from `image-dired-create-gallery-lists'.
2251 image-dired-file-tag-list:
2257 image-dired-tag-file-list:
2264 (if image-dired-file-tag-list
2265 (if (setq curr (assoc file image-dired-file-tag-list))
2267 (setcdr image-dired-file-tag-list
2268 (cons (list file tag) (cdr image-dired-file-tag-list))))
2269 (setq image-dired-file-tag-list (list (list file tag))))
2271 (if image-dired-tag-file-list
2272 (if (setq curr (assoc tag image-dired-tag-file-list))
2275 (setcdr image-dired-tag-file-list
2276 (cons (list tag file) (cdr image-dired-tag-file-list))))
2277 (setq image-dired-tag-file-list (list (list tag file))))))
2279 (defun image-dired-add-to-file-comment-list (file comment)
2280 "Helper function used from `image-dired-create-gallery-lists'.
2286 image-dired-file-comment-list:
2291 (if image-dired-file-comment-list
2292 (if (not (assoc file image-dired-file-comment-list))
2293 (setcdr image-dired-file-comment-list
2295 (cdr image-dired-file-comment-list))))
2296 (setq image-dired-file-comment-list (list (cons file comment)))))
2298 (defun image-dired-create-gallery-lists ()
2299 "Create temporary lists used by `image-dired-gallery-generate'."
2300 (let ((buf (find-file image-dired-db-file))
2302 (setq image-dired-tag-file-list nil)
2303 (setq image-dired-file-tag-list nil)
2304 (setq image-dired-file-comment-list nil)
2319 (image-dired-add-to-tag-file-lists x file)
2320 (image-dired-add-to-file-comment-list file (match-string 1 x))))
2324 (setq image-dired-tag-file-list
2325 (sort image-dired-tag-file-list
2329 (defun image-dired-hidden-p (file)
2334 (if (member tag image-dired-gallery-hidden-tags)
2336 (cdr (assoc file image-dired-file-tag-list)))
2339 (defun image-dired-gallery-generate ()
2343 `image-dired-gallery-dir'"
2345 (if (eq 'per-directory image-dired-thumbnail-storage)
2348 (image-dired-create-gallery-lists)
2349 (let ((tags image-dired-tag-file-list)
2353 (if (file-exists-p image-dired-gallery-dir)
2354 (if (not (file-directory-p image-dired-gallery-dir))
2355 (error "Variable image-dired-gallery-dir is not a directory"))
2356 (make-directory image-dired-gallery-dir))
2359 (format "%s/index.html" image-dired-gallery-dir)))
2372 (when (not (member tag image-dired-gallery-hidden-tags))
2386 (when (not (member tag image-dired-gallery-hidden-tags))
2391 (format "%s/%s.html" image-dired-gallery-dir count)))
2400 (when (not (image-dired-hidden-p file))
2404 image-dired-gallery-image-root-url
2406 image-dired-gallery-thumb-image-root-url
2407 (file-name-nondirectory (image-dired-thumb-name file)) file))
2409 (if (setq comment (cdr (assoc file image-dired-file-comment-list)))
2414 (setq file-tags (assoc file image-dired-file-tag-list))) 2)
2438 (defun image-dired-kill-buffer-and-window ()
2447 (defvar image-dired-widget-list nil
2451 (defun image-dired-dired-edit-comment-and-tags ()
2456 (setq image-dired-widget-list nil)
2458 (let ((files (dired-get-marked-files)))
2478 (setq thumb-file (image-dired-thumb-name file)
2487 :value (or (image-dired-get-comment file) "")))
2496 (image-dired-list-tags file)
2500 (setq image-dired-widget-list
2501 (append image-dired-widget-list
2510 (image-dired-save-information-from-widgets)
2527 (defun image-dired-save-information-from-widgets ()
2528 "Save information found in `image-dired-widget-list'.
2529 Use the information in `image-dired-widget-list' to save comments and
2531 `image-dired-dired-edit-comment-and-tags'."
2533 (image-dired-write-comments
2539 image-dired-widget-list))
2540 (image-dired-write-tags
2541 (dolist (widget image-dired-widget-list lst)
2552 ;; (defvar image-dired-dir-max-size 12300000)
2554 ;; (defun image-dired-test-clean-old-files ()
2555 ;; "Clean `image-dired-dir' from old thumbnail files.
2557 ;; thumbnail files in `image-dired-dir' is larger than 'image-dired-dir-max-size',
2566 ;; (directory-files (image-dired-dir) t ".+\.thumb\..+$"))
2571 ;; (while (> dirsize image-dired-dir-max-size)
2581 ;; (defun dired-speedbar-buttons (dired-buffer)
2582 ;; (when (and (boundp 'image-dired-use-speedbar)
2583 ;; image-dired-use-speedbar)
2584 ;; (let ((filename (with-current-buffer dired-buffer
2585 ;; (dired-get-filename))))
2592 ;; (image-dired-get-thumbnail-image filename)))))))
2594 ;; (setq image-dired-use-speedbar t)
2596 (provide 'image-dired)
2599 ;;; image-dired.el ends here