;;; thumbs.el --- Thumbnails previewer for images files
-;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2016 Free Software Foundation, Inc.
;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
;; Keywords: Multimedia
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; This package create two new modes: thumbs-mode and thumbs-view-image-mode.
;; It is used for basic browsing and viewing of images from within Emacs.
;; Minimal image manipulation functions are also available via external
-;; programs. If you want to do more complex tasks like categorise and tag
+;; programs. If you want to do more complex tasks like categorize and tag
;; your images, use image-dired.el
;;
;; The 'convert' program from 'ImageMagick'
;;; Code:
(require 'dired)
+(require 'cl-lib) ; for cl-gensym
;; CUSTOMIZATIONS
:version "22.1"
:group 'multimedia)
-(defcustom thumbs-thumbsdir "~/.emacs.d/thumbs"
- "*Directory to store thumbnails."
+(defcustom thumbs-thumbsdir (locate-user-emacs-file "thumbs")
+ "Directory to store thumbnails."
:type 'directory
:group 'thumbs)
(defcustom thumbs-geometry "100x100"
- "*Size of thumbnails."
+ "Size of thumbnails."
:type 'string
:group 'thumbs)
:type 'integer
:group 'thumbs)
+;; Unfortunately Windows XP has a program called CONVERT.EXE in
+;; C:/WINDOWS/SYSTEM32/ for partitioning NTFS systems. So Emacs
+;; can find the one in your ImageMagick directory, you need to
+;; customize this value to the absolute filename.
(defcustom thumbs-conversion-program
(if (eq system-type 'windows-nt)
"convert.exe"
(or (executable-find "convert")
"/usr/X11R6/bin/convert"))
- "*Name of conversion program for thumbnails generation.
-It must be 'convert'."
+ "Name of conversion program for thumbnails generation.
+It must be \"convert\"."
:type 'string
:group 'thumbs)
:group 'thumbs)
(defcustom thumbs-relief 5
- "*Size of button-like border around thumbnails."
+ "Size of button-like border around thumbnails."
:type 'integer
:group 'thumbs)
(defcustom thumbs-margin 2
- "*Size of the margin around thumbnails.
+ "Size of the margin around thumbnails.
This is where you see the cursor."
:type 'integer
:group 'thumbs)
(make-variable-buffer-local 'thumbs-marked-list)
(put 'thumbs-marked-list 'permanent-local t)
-(defalias 'thumbs-gensym
- (if (fboundp 'gensym)
- 'gensym
- ;; Copied from cl-macs.el
- (defvar thumbs-gensym-counter 0)
- (lambda (&optional prefix)
- "Generate a new uninterned symbol.
-The name is made by appending a number to PREFIX, default \"G\"."
- (let ((pfix (if (stringp prefix) prefix "G"))
- (num (if (integerp prefix) prefix
- (prog1 thumbs-gensym-counter
- (setq thumbs-gensym-counter
- (1+ thumbs-gensym-counter))))))
- (make-symbol (format "%s%d" pfix num))))))
-
(defsubst thumbs-temp-dir ()
(file-name-as-directory (expand-file-name thumbs-temp-dir)))
(format "%s%s-%s.jpg"
(thumbs-temp-dir)
thumbs-temp-prefix
- (thumbs-gensym "T")))
+ (cl-gensym "T")))
(defun thumbs-thumbsdir ()
"Return the current thumbnails directory (from `thumbs-thumbsdir').
(let ((fattribs-list (file-attributes f)))
`(,(nth 4 fattribs-list) ,(nth 7 fattribs-list) ,f)))
(directory-files (thumbs-thumbsdir) t (image-file-name-regexp)))
- '(lambda (l1 l2) (time-less-p (car l1) (car l2)))))
+ (lambda (l1 l2) (time-less-p (car l1) (car l2)))))
(dirsize (apply '+ (mapcar (lambda (x) (cadr x)) files-list))))
(while (> dirsize thumbs-thumbsdir-max-size)
(progn
(setq dirsize (- dirsize (car (cdar files-list))))
(setq files-list (cdr files-list)))))
-;; Check the thumbsnail directory size and clean it if necessary.
+;; Check the thumbnail directory size and clean it if necessary.
(when thumbs-thumbsdir-auto-clean
(thumbs-cleanup-thumbsdir))
ARG any arguments to the ACTION command,
OUTPUT-FORMAT is the file format to output (default is jpeg),
ACTION-PREFIX is the symbol to place before the ACTION command
- (defaults to '-' but can sometimes be '+')."
- (let ((command (format "%s %s%s %s \"%s\" \"%s:%s\""
- thumbs-conversion-program
- (or action-prefix "-")
- action
- (or arg "")
- filein
- (or output-format "jpeg")
- fileout)))
- (call-process shell-file-name nil nil nil shell-command-switch command)))
+ (defaults to `-' but can sometimes be `+')."
+ (call-process thumbs-conversion-program nil nil nil
+ (or action-prefix "-")
+ action
+ (or arg "")
+ filein
+ (format "%s:%s" (or output-format "jpeg") fileout)))
(defun thumbs-new-image-size (s increment)
"New image (a cons of width x height)."
((string-match ".*\\.png\\'" img) 'png)
((string-match ".*\\.tiff?\\'" img) 'tiff)))
+(declare-function image-size "image.c" (spec &optional pixels frame))
+
(defun thumbs-file-size (img)
(let ((i (image-size
(find-image `((:type ,(thumbs-image-type img) :file ,img))) t)))
(provide 'thumbs)
-;; arch-tag: f9ac1ef8-83fc-42c0-8069-1fae43fd2e5c
;;; thumbs.el ends here