Emacs 27: Icomplete Mode

By Xah Lee. Date: . Last updated: .

This page is for Emacs 27 (Released 2020-08) . For Emacs 28 (Released 2022-04) , see Emacs: icomplete, Name Completion.

icomplete-mode enhances emacs's name completion when in minibuffer prompts.

emacs icomplete mode 2017 07 10 48947
emacs Alt+x icomplete-mode

icomplete does completion for any command that prompts for a list of choices. Here's some of the commands that icomplete has a effect:

icomplete keys

Tab
Show choices.
Enter
Select current choice.
Ctrl+.
Next choice
Ctrl+,
Previous choice
Ctrl+j
Select current choice

Icomplete Mode Setup

Put this in your Emacs Init File:

(progn
  ;; minibuffer enhanced completion
  (require 'icomplete)
  (icomplete-mode 1)
  ;; show choices vertically
  (setq icomplete-separator "\n")
  (setq icomplete-hide-common-prefix nil)
  (setq icomplete-in-buffer t)

  (define-key icomplete-minibuffer-map (kbd "<right>") 'icomplete-forward-completions)
  (define-key icomplete-minibuffer-map (kbd "<left>") 'icomplete-backward-completions))

icomplete is written by Ken Manheimer, first released in 1993. (Ken Manheimer's home page: http://myriadicity.net/https://twitter.com/myriadicity )


(defvar icomplete-minibuffer-map
  (let ((map (make-sparse-keymap)))
    (define-key map [?\M-\t] 'icomplete-force-complete)
    (define-key map [remap minibuffer-complete-and-exit] 'icomplete-ret)
    (define-key map [?\C-j]  'icomplete-force-complete-and-exit)
    (define-key map [?\C-.]  'icomplete-forward-completions)
    (define-key map [?\C-,]  'icomplete-backward-completions)
    map)
  "Keymap used by `icomplete-mode' in the minibuffer.")
(defvar icomplete-fido-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "C-k") 'icomplete-fido-kill)
    (define-key map (kbd "C-d") 'icomplete-fido-delete-char)
    (define-key map (kbd "RET") 'icomplete-fido-ret)
    (define-key map (kbd "C-m") 'icomplete-fido-ret)
    (define-key map (kbd "DEL") 'icomplete-fido-backward-updir)
    (define-key map (kbd "M-j") 'icomplete-fido-exit)
    (define-key map (kbd "C-s") 'icomplete-forward-completions)
    (define-key map (kbd "C-r") 'icomplete-backward-completions)
    (define-key map (kbd "<right>") 'icomplete-forward-completions)
    (define-key map (kbd "<left>") 'icomplete-backward-completions)
    (define-key map (kbd "C-.") 'icomplete-forward-completions)
    (define-key map (kbd "C-,") 'icomplete-backward-completions)
    map)
  "Keymap used by `fido-mode' in the minibuffer.")
(defvar icomplete-vertical-mode-minibuffer-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "C-n") 'icomplete-forward-completions)
    (define-key map (kbd "C-p") 'icomplete-backward-completions)
    (define-key map (kbd "<down>") 'icomplete-forward-completions)
    (define-key map (kbd "<up>") 'icomplete-backward-completions)
    (define-key map (kbd "M-<") 'icomplete-vertical-goto-first)
    (define-key map (kbd "M->") 'icomplete-vertical-goto-last)
    map)
  "Keymap used by `icomplete-vertical-mode' in the minibuffer.")

Emacs Name Completion