Emacs 27: Icomplete Mode
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.
icomplete does completion for any command that prompts for a list of choices. Here's some of the commands that icomplete has a effect:
execute-extended-command
find-file
switch-to-buffer
dired
describe-function
describe-variable
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.")