When completing in the minibuffer using icomplete-mode, an invisible completion can circumvent the minibuffer's default selection. For example, say you have icomplete enabled, and you try to kill the current buffer. The minibuffer will show a confirmation message like, "Kill buffer (default: foo)". If you type C-j to trigger icomplete without having actually typed any characters, icomplete will terminate an unrelated buffer and won't even tell you which it was. It will terminate whatever buffer it decides is the completion of nothing at that time. This is confusing because the minibuffer prompt suggests a completely different default. Here's a function that fixes the behavior: (defun icomplete-complete-or-default () (interactive) (let* ((start (minibuffer-prompt-end)) (end (point-max)) (phrase (buffer-substring start end))) (if (zerop (length phrase)) ; Select the minibuffer's default if there's no text after ; the prompt. (minibuffer-complete-and-exit) ; Select icomplete's default completion if the user has typed ; something. (minibuffer-force-complete-and-exit)) )) Then remapping C-j to call that in the icomplete keymap fixes the bug: (defvar icomplete-minibuffer-map (let ((map (make-sparse-keymap))) (define-key map [?\M-\t] 'minibuffer-force-complete) - (define-key map [?\C-j] 'minibuffer-force-complete-and-exit) + (define-key map [?\C-j] 'icomplete-complete-or-default) (define-key map [?\C-.] 'icomplete-forward-completions) (define-key map [?\C-,] 'icomplete-backward-completions) map) "Keymap used by `icomplete-mode' in the minibuffer.") I came across this trying to remap icomplete to instead of C-j so that the keys are more like the (apparently dead) iswitchb. That doesn't seem like an unreasonable thing to do, although I don't know how many people used iswitchb.