;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
:prefix "image-dired-"
:group 'multimedia)
-(defcustom image-dired-dir "~/.emacs.d/image-dired/"
+(defcustom image-dired-dir (concat user-emacs-directory "image-dired/")
"Directory where thumbnail images are stored."
:type 'string
:group 'image-dired)
(const :tag "Per-directory" per-directory))
:group 'image-dired)
-(defcustom image-dired-db-file "~/.emacs.d/image-dired/.image-dired_db"
+(defcustom image-dired-db-file
+ (concat user-emacs-directory "image-dired/.image-dired_db")
"Database file where file names and their associated tags are stored."
:type 'string
:group 'image-dired)
-(defcustom image-dired-temp-image-file "~/.emacs.d/image-dired/.image-dired_temp"
+(defcustom image-dired-temp-image-file
+ (concat user-emacs-directory "image-dired/.image-dired_temp")
"Name of temporary image file used by various commands."
:type 'string
:group 'image-dired)
-(defcustom image-dired-gallery-dir "~/.emacs.d/image-dired/.image-dired_gallery"
+(defcustom image-dired-gallery-dir
+ (concat user-emacs-directory "image-dired/.image-dired_gallery")
"Directory to store generated gallery html pages.
This path needs to be \"shared\" to the public so that it can access
the index.html page that image-dired creates."
:group 'image-dired)
(defcustom image-dired-cmd-create-thumbnail-options
- "%p -size %wx%h \"%f\" -resize %wx%h +profile \"*\" jpeg:\"%t\""
+ "%p -size %wx%h \"%f\" -resize %wx%h -strip jpeg:\"%t\""
"Format of command used to create thumbnail image.
Available options are %p which is replaced by
`image-dired-cmd-create-thumbnail-program', %w which is replaced by
:group 'image-dired)
(defcustom image-dired-cmd-create-temp-image-options
- "%p -size %wx%h \"%f\" -resize %wx%h +profile \"*\" jpeg:\"%t\""
+ "%p -size %wx%h \"%f\" -resize %wx%h -strip jpeg:\"%t\""
"Format of command used to create temporary image for display window.
Available options are %p which is replaced by
`image-dired-cmd-create-temp-image-program', %w and %h which is replaced by
:group 'image-dired)
(defcustom image-dired-temp-rotate-image-file
- "~/.emacs.d/image-dired/.image-dired_rotate_temp"
+ (concat user-emacs-directory "image-dired/.image-dired_rotate_temp")
"Temporary file for rotate operations."
:type 'string
:group 'image-dired)
(if (not append)
(erase-buffer)
(goto-char (point-max)))
- (mapcar
+ (mapc
(lambda (curr-file)
(setq thumb-name (image-dired-thumb-name curr-file))
(if (and (not (file-exists-p thumb-name))
;;;###autoload
(defalias 'tumme 'image-dired-show-all-from-dir)
+(defun image-dired-sane-db-file ()
+ "Check if `image-dired-db-file' exists.
+If not, try to create it (including any parent directories).
+Signal error if there are problems creating it."
+ (or (file-exists-p image-dired-db-file)
+ (let (dir buf)
+ (unless (file-directory-p (setq dir (file-name-directory
+ image-dired-db-file)))
+ (make-directory dir t))
+ (with-current-buffer (setq buf (create-file-buffer
+ image-dired-db-file))
+ (write-file image-dired-db-file))
+ (kill-buffer buf)
+ (file-exists-p image-dired-db-file))
+ (error "Could not create %s" image-dired-db-file)))
+
(defun image-dired-write-tags (file-tags)
"Write file tags to database.
Write each file and tag in FILE-TAGS to the database. FILE-TAGS
is an alist in the following form:
((FILE . TAG) ... )"
+ (image-dired-sane-db-file)
(let (end file tag)
(with-temp-file image-dired-db-file
(insert-file-contents image-dired-db-file)
(defun image-dired-remove-tag (files tag)
"For all FILES, remove TAG from the image database."
+ (image-dired-sane-db-file)
(save-excursion
(let (end buf start)
(setq buf (find-file image-dired-db-file))
(if (stringp files)
(setq files (list files))
(error "Files must be a string or a list of strings!")))
- (mapcar
+ (mapc
(lambda (file)
(goto-char (point-min))
(when (search-forward-regexp
(defun image-dired-list-tags (file)
"Read all tags for image FILE from the image database."
+ (image-dired-sane-db-file)
(save-excursion
(let (end buf (tags ""))
(setq buf (find-file image-dired-db-file))
(defun image-dired-next-line ()
"Move to next line and display properties."
(interactive)
- (next-line 1)
+ (forward-line 1)
;; If we end up in an empty spot, back up to the next thumbnail.
(if (not (image-dired-image-at-point-p))
(image-dired-backward-image))
(defun image-dired-previous-line ()
"Move to previous line and display properties."
(interactive)
- (previous-line 1)
+ (forward-line -1)
;; If we end up in an empty spot, back up to the next
;; thumbnail. This should only happen if the user deleted a
;; thumbnail and did not refresh, so it is not very common. But we
If optional argument ORIGINAL-SIZE is non-nil, display image in its
original size."
(let ((new-file (expand-file-name image-dired-temp-image-file))
- width height command ret)
+ width height command ret
+ (image-type 'jpeg))
(setq file (expand-file-name file))
(if (not original-size)
(progn
shell-command-switch command))
(if (not (= 0 ret))
(error "Could not resize image")))
+ (setq image-type (image-type-from-file-name file))
(copy-file file new-file t))
(with-current-buffer (image-dired-create-display-image-buffer)
(let ((inhibit-read-only t))
(erase-buffer)
(clear-image-cache)
- (image-dired-insert-image image-dired-temp-image-file 'jpeg 0 0)
+ (image-dired-insert-image image-dired-temp-image-file image-type 0 0)
(goto-char (point-min))
(image-dired-update-property 'original-file-name file)))))
(image-dired-display-image (dired-get-filename) arg))
(defun image-dired-image-at-point-p ()
- "Return true if there is a image-dired thumbnail at point."
+ "Return true if there is an image-dired thumbnail at point."
(get-text-property (point) 'image-dired-thumbnail))
(defun image-dired-rotate-thumbnail (degrees)
Write file comments to one or more files. FILE-COMMENTS is an alist on
the following form:
((FILE . COMMENT) ... )"
+ (image-dired-sane-db-file)
(let (end comment-beg-pos comment-end-pos file comment)
(with-temp-file image-dired-db-file
(insert-file-contents image-dired-db-file)
(defun image-dired-get-comment (file)
"Get comment for file FILE."
+ (image-dired-sane-db-file)
(save-excursion
(let (end buf comment-beg-pos comment-end-pos comment)
(setq buf (find-file image-dired-db-file))
on all image files in the database file. The files that have a
matching tags will be marked in the dired buffer."
(interactive)
+ (image-dired-sane-db-file)
(let ((tag (read-string "Mark tagged files (regexp): "))
(hits 0)
files buf)
(setq files (append (list (match-string 1)) files)))
(kill-buffer buf)
;; Mark files
- (mapcar
+ (mapc
;; I tried using `dired-mark-files-regexp' but it was
;; waaaay to slow.
(lambda (curr-file)
(defun image-dired-create-gallery-lists ()
"Create temporary lists used by `image-dired-gallery-generate'."
+ (image-dired-sane-db-file)
(let ((buf (find-file image-dired-db-file))
end beg file row-tags)
(setq image-dired-tag-file-list nil)