From: "Mathias Dahl" <mathias.dahl@gmail.com>
Subject: Additon to tumme.el
Date: Sun, 16 Jul 2006 11:21:44 +0200 [thread overview]
Message-ID: <7dbe73ed0607160221o38238f6dl10dd953a12112e0c@mail.gmail.com> (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
next reply other threads:[~2006-07-16 9:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-16 9:21 Mathias Dahl [this message]
2006-07-16 12:35 ` Additon to tumme.el 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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7dbe73ed0607160221o38238f6dl10dd953a12112e0c@mail.gmail.com \
--to=mathias.dahl@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).