[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Additon to tumme.el
From: |
Mathias Dahl |
Subject: |
Additon to tumme.el |
Date: |
Sun, 16 Jul 2006 11:21:44 +0200 |
I would like to add the following code to tumme.el. It provides a
facility to very easily edit file tags and comments of image files in
a buffer using widgets. It is actually quite simple but in my opinion
a very nice piece of functionality for end users. The code does not
affect any old functionality in tumme (only new functions and
variables are added). I also propose yet another key binding (C-t e)
in Dired that will call `tumme-dired-edit-comment-and-tags'.
Is it a bad time now for things like this?
;;;; Code begins here
(require 'widget)
(eval-when-compile
(require 'wid-edit))
(defvar tumme-widget-list nil
"List to keep track of meta data in edit buffer")
(defun tumme-dired-edit-comment-and-tags ()
"Edit comment and tags of current or marked image files.
Edit comment and tags for all marked image files in an
easy-to-use form."
(interactive)
(setq tumme-widget-list nil)
;; Setup buffer.
(let ((files (dired-get-marked-files)))
(switch-to-buffer "*Tumme Edit Meta Data*")
(kill-all-local-variables)
(make-local-variable 'widget-example-repeat)
(let ((inhibit-read-only t))
(erase-buffer))
(remove-overlays)
;; Some help for the user.
(widget-insert
"\nEdit comments and tags for each image. Separate multiple tags
with a comma. Move forward between fields using TAB or RET.
Move to the previous field using backtab (S-TAB). Save by
activating the Save button at the bottom of the form or cancel
the operation by activating the Cancel button.\n\n")
;; Here comes all images and a comment and tag field for each
;; image.
(mapc
(lambda (file)
(let* ((thumb-file (tumme-thumb-name file))
(img (create-image thumb-file))
comment-widget tag-widget)
(insert-image img)
(widget-insert "\n\nComment: ")
(setq comment-widget
(widget-create 'editable-field
:size 60
:format "%v "
:value (or (tumme-get-comment file) "")))
(widget-insert "\nTags: ")
(setq tag-widget
(widget-create 'editable-field
:size 60
:format "%v "
:value (or (mapconcat
(lambda (tag)
tag)
(tumme-list-tags file)
",") "")))
;; Save information in all widgets so that we can use it when
;; the user saves the form.
(setq tumme-widget-list
(append tumme-widget-list
(list (list file comment-widget tag-widget))))
(widget-insert "\n\n")))
files))
;; Footer with Save and Cancel button.
(widget-insert "\n")
(widget-create 'push-button
:notify
(lambda (&rest ignore)
(tumme-save-information-from-widgets)
(bury-buffer)
(message "Done."))
"Save")
(widget-insert " ")
(widget-create 'push-button
:notify
(lambda (&rest ignore)
(bury-buffer)
(message "Operation canceled."))
"Cancel")
(widget-insert "\n")
(use-local-map widget-keymap)
(widget-setup)
;; Jump to the first widget.
(widget-forward 1))
(defun tumme-save-information-from-widgets ()
"Save information found in `tumme-widget-list'.
Use the information in `tumme-widget-list' to save comments and
tags to their respective image file. Internal function used by
`tumme-dired-edit-comment-and-tags'."
(mapc
(lambda (x)
(let ((file (car x))
(comment (widget-value (cadr x)))
(tags (widget-value (caddr x))))
(tumme-write-comment file comment)
(mapc
(lambda (tag)
(tumme-write-tag file tag))
(split-string tags ","))))
tumme-widget-list))
;;;; Code ends here
/Mathias
- Additon to tumme.el,
Mathias Dahl <=