This is a successor to ido-grid-mode. It does essentially the same thing (display ido prospects in a grid), but it’s rewritten to be faster and less flaky.
Use M-x package-install-file, or install from MELPA if I put it up there, or use el-get.
Everything can be made to work with M-x customize-group ido-grid. If you don’t like customize, you can use ido-grid-enable to switch it on.
ido-grid-rows- this is how many rows to show. If it’s a float, it does a proportion of the frame height, so 0.5 is 50% of frame height.ido-grid-max-columns- if not nil, only this many columnsido-grid-start-small- if this is t, then the grid will only come up with one row until you press up or down or otherwise invokeido-grid-expand(you can bind this to a key by e.g.)(add-hook 'ido-setup-hook (lambda () (define-key ido-completion-map (kbd "M-SPC") #'ido-grid-expand)))
ido-grid-bind-keys- if this is t, then ido-grid will rebind the keys<up>,<down>,<left>,<right>,C-nandC-pinido-completion-map, and will changeido-cannot-complete-commandtoido-grid-down. Set this to nil and you can do your own key scheme as above.ido-grid-special-commands- this is a convenience to do different layout for different commands. For example, I haveido-occurconfigured withstart-smalloff andmax-columnsequal to 1, so it displays in a vertical list. If you don’t like customize, you can do this kind of thing directly, e.g.(defun tall (o &rest args) (let ((ido-grid-max-columns 1) ;; single vertical col (ido-grid-start-small nil) ;; popup immediately (ido-grid-rows 0.5)) ;; 50% of frame height (apply o args) )) ;; make smex tall (advice-add 'smex :around #'tall)

