Can I complete and then immediately launch a new ivy completion? #596

benmaughan opened this Issue Jul 22, 2016 · 2 comments


None yet

2 participants


I use ivy to complete email addresses in mu4e, and at the moment, if I want to add multiple addresses, I use RET to complete the current address, then insert a comma and manually start a new completion. I'd like to adapt this so that I can hit comma at the ivy prompt it will complete the current selection, inserting the selected address and a comma in the buffer, and then clear the ivy filter in the minibuffer so I can start typing a new address. This emulates the address completion in e.g. thunderbird and gmail.

Any suggestions would be greatly appreciated!

My current code is described here

abo-abo commented Jul 23, 2016

Here's a template for implementing what you want:

(defvar contacts '(""

(defun counsel-email-action (x)
    (insert x)))

(defvar counsel-email-map
  (let ((map (make-sparse-keymap)))
    (define-key map "," 'counsel-email-more)

(defun counsel-email-more ()
    (insert ", "))
  (setq ivy-text ""))

(defun counsel-email ()
  (ivy-read "email: " contacts
            :action 'counsel-email-action
            :keymap counsel-email-map))

Pressing RET inserts an email and exits. Pressing , inserts and email and a comma, and clears the current input.


Thanks - this is exactly what I needed to build my solution.

@benmaughan benmaughan closed this Aug 11, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment