ido-mode doesn't provide completion for eshell, shell or sql-mode out of the box, and I wasn't been able to find any package with this option that is lightweight enough (Helm, I'm looking at you). So, after few attempts, here is the code for that:
(defun ido-eshell-comint-history () "eshell & comint history with ido." (interactive) (if (or (member major-mode '(eshell-mode sql-interactive-mode)) (derived-mode-p 'comint-mode)) (let ((ring (if (eq major-mode 'eshell-mode) eshell-history-ring comint-input-ring))) (insert (ido-completing-read "History: " (delete-dups (ring-elements ring))))) (message "Unsupported mode")))
After evaluating the code, in eshell simply execute
M-x ido-eshell-comint-history and magic will happen - you will get full eshell history managed by ido-mode. To make it more authentic, map it to
C-c C-l, which is default sequence for completion in eshell.
The same can be applied for
sql-mode as well.
But, the things gets interesting here:
(ido-eshell-comint-history) will pick up history for all modes inherided from comint-mode (
shell is using comint-mode), so you will get history completion for python, lua, lisp and other inferior processes for free!
Just to add (commenting above code), although
sql-mode is using comint-mode, it doesn't derive it so additional check is necessary. Also to enable history in
sql-mode you will need to set variable
sql-input-ring-file-name as well.