unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Additon to tumme.el
@ 2006-07-16  9:21 Mathias Dahl
  2006-07-16 12:35 ` David Kastrup
  2006-07-17  1:41 ` Richard Stallman
  0 siblings, 2 replies; 6+ messages in thread
From: Mathias Dahl @ 2006-07-16  9:21 UTC (permalink / raw)


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

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-07-20  9:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-16  9:21 Additon to tumme.el Mathias Dahl
2006-07-16 12:35 ` David Kastrup
2006-07-16 22:43   ` Mathias Dahl
2006-07-17  1:41 ` Richard Stallman
2006-07-17 10:46   ` Mathias Dahl
2006-07-20  9:28     ` Mathias Dahl

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).