From 1a33c04074351da15309d02de5234e8db68cfdf5 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Mon, 5 Nov 2012 23:58:20 +0100 Subject: [PATCH] Add "Ask for selection in emacs" archive post --- posts/Ask_for_selection_in_emacs.mdwn | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 posts/Ask_for_selection_in_emacs.mdwn diff --git a/posts/Ask_for_selection_in_emacs.mdwn b/posts/Ask_for_selection_in_emacs.mdwn new file mode 100644 index 0000000..b2ddeee --- /dev/null +++ b/posts/Ask_for_selection_in_emacs.mdwn @@ -0,0 +1,42 @@ +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 `` key, this turned it into, for example ` +ryu` and ` 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: + +[[!format el """ +(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 ` n`. + +[[!meta date="2012-05-02 21:09:00"]] +[[!tag emacs elisp coding]]