Ask for selection in emacs

I came across an email on one of the emacs mailing lists today, where someone asked how to ask a user for input whilst providing completions. The first answer he got was to try tmm-prompt, so I looked into it a little.

I use mu4e as my primary email program, but since it isn't designed (seemingly) for use with multiple accounts I've got some wrapper functions that set some variables according to my liking and then start mu4e. This works very well, but it's a pain to have to use M-x view-ryu-mail or M-x view-ninthfloor-mail and such, so I wrote a function to read a string from the minibuffer, which I then bound to the <XF86Mail> key, this turned it into, for example <XF86Mail> ryu and <XF86Mail> ninthfloor and so on, but this doesn't have any completion or notification of my options.

So after looking at tmm-prompt I came up with the following:

(defvar oni:mailbox-map
  '(("" . "ryu")
    ("ninthfloor" . "ninthfloor"))
  "A mailbox map for use with `tmm-prompt'.")

(defun view-ryu-mail ()...)
(defun view-ninthfloor-mail ()...)

(defun view-mu ()
  (let* ((tmm-completion-prompt "Choose a mailbox\n")
         (inbox (tmm-prompt oni:mailbox-map)))
    (funcall (intern (concat "view-" inbox "-mail")))))

I've left out the definitions and some mail accounts for brevity.

tmm-prompt is usually used when using the text-mode menu with M-`, but it works very well here too. This changes mailbox selection to, for example <XF86Mail> r or <XF86Mail> n.

Date: 2012-06-05 20:46:24 CEST

Validate XHTML 1.0