(defvar-local start-display-at-beginning-of-minibuffer nil) (defun start-display-at-beginning-of-minibuffer (&rest args) (when (and start-display-at-beginning-of-minibuffer (minibufferp)) (set-window-start-at-begin (point-min) (point)))) (defun set-window-start-at-begin (beg end) (when (< (+ beg 2) end) (set-window-start nil beg) (unless (pos-visible-in-window-p end nil t) (set-window-start-at-begin (+ beg (/ (- end beg) 2)) end)))) (add-hook 'window-scroll-functions #'start-display-at-beginning-of-minibuffer) (add-hook 'post-command-hook #'start-display-at-beginning-of-minibuffer) (setq icomplete-separator "\n") (add-hook 'icomplete-minibuffer-setup-hook (lambda () (setq start-display-at-beginning-of-minibuffer t))) (defun icomplete-vertical-reformat-completions (completions) (save-match-data (if (string-match "^\\((.*)\\|\\[.*\\]\\)?{\\(\\(?:.\\|\n\\)+\\)}" completions) (format "%s \n%s" (or (match-string 1 completions) "") (match-string 2 completions)) completions))) (advice-add 'icomplete-completions :filter-return #'icomplete-vertical-reformat-completions)