2 May 2012 9:09 PM (emacs | elisp | coding)
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 '(("ryulash.org" . "ryu") ("ninthfloor" . "ninthfloor")) "A mailbox map for use with `tmm-prompt'.") (defun view-ryu-mail ()...) (defun view-ninthfloor-mail ()...) (defun view-mu () (interactive) (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
.