Subject: bug#10911: 24.0.94; `ido-read-directory-name' should offer known hosts for completion

From: Oleksandr Manzyuk <[email-masked]>
Date: Wed, 29 Feb 2012 12:52:15 +0000

This is a feature request rather than a bug.  `ido-read-directory-name'
doesn't offer known hosts for completion, unlike `ido-read-file-name'.
Here is what I mean by that.  I'm assuming that `ido-mode' is on.
Please forgive me if I belabor the point.

When I type C-x C-f // and hit TAB, I obtain an *Ido Completions* buffer
containing not only local directory names (bin/, boot/, dev/ etc.), but
also known hosts, which is very convenient in conjunction with TRAMP.  I
can type C-x C-f // g o RET, which expands into /golconda.cs.nuim.ie:,
and if I already have a remote shell running on that host, I can see a
list of files and directories there.  If there is no remote shell yet, I
can simply hit RET, and it will be opened using TRAMP.  Of course, I can
open a dired buffer visiting a remote directory this way, but it should
also be equally convenient to do that with `ido-dired'.  While it is
possible, it is also less convenient: I have to type C-x d //, type the
host name followed by colon *in full and without completion*.

Summarizing, there is a discrepancy in how `ido-read-directory-name' and
`ido-read-file-name' generate completions, and I don't see why this
should be the case.

While I'm happy with C-x C-f for opening dired buffers, also on remote
hosts, having `ido-read-directory-name' complete known hosts would make
this function more useful for other purposes.  For example, I have the
following function:

(defun named-shell (name directory)
  "Open a named shell. NAME is the base name of the shell buffer,
and DIRECTORY is the directory to open the shell in."
  (interactive "MName: \nDDirectory: ")
  (switch-to-buffer (concat "*" name "*"))
  (cd directory)
  (shell (current-buffer)))

I introduced it primarily to be able to quickly open inferior remote
shells.  However, when I'm queried for the directory to open the shell
in, I still have to type in the host name in full.

In GNU Emacs 24.0.94.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1)
 of 2012-02-28 on pandora
Windowing system distributor `The X.Org Foundation', version 11.0.10707000
Configured using:
 `configure '--prefix=/home/manzyuk''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_IE.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Lisp Interaction

Minor modes in effect:
  eldoc-mode: t
  diff-auto-refine-mode: t
  paredit-mode: t
  ido-everywhere: t
  shell-dirtrack-mode: t
  savehist-mode: t
  icomplete-mode: t
  global-auto-revert-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
M-x r e p r o t <backspace> <backspace> <backspace> 
o r t SPC e m a c s SPC b u g <return>

Recent messages:
Loading /home/manzyuk/emacs-preamble/init.el (source)...
Loading /home/manzyuk/.emacs.d/elpa/haskell-mode-2.8.0/haskell-site-file.el (source)...done
Loading /home/manzyuk/quicklisp/slime-helper.el (source)...done
Loading /home/manzyuk/emacs-preamble/init.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
None found.

Features:
(shadow sort flyspell ispell mail-extr emacsbug message rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader eldoc preamble-scheme preamble-ruby inf-ruby
ruby-mode compile preamble-org org-install preamble-magit preamble-diff
magit-bisect magit-key-mode magit diff-mode log-edit easy-mmode
pcvs-util add-log preamble-lisp info-look slime-autoloads
preamble-haskell ghci-completion preamble-google-translate
google-translate json url url-proxy url-privacy url-expand url-methods
url-history url-cookie url-util url-parse url-vars mailcap
preamble-emacs-lisp preamble-paredit paredit preamble-auctex reftex
reftex-vars preamble-package finder-inf auctex-autoloads tex-site info
easymenu ghci-completion-autoloads google-translate-autoloads
haskell-mode-autoloads inf-ruby-autoloads magit-autoloads
paredit-autoloads package tabulated-list preamble-text preamble-shell
preamble-prog preamble-makefile preamble-mail smtpmail sendmail rfc2047
rfc2045 ietf-drums mail-utils preamble-ido ido preamble-ibuffer
preamble-hippie-expand preamble-ediff preamble-dired preamble-comint
preamble-ansi-color preamble-windows preamble-tramp tramp tramp-compat
auth-source eieio byte-opt bytecomp byte-compile cconv macroexp assoc
gnus-util mm-util mail-prsvr password-cache shell pcomplete comint
ansi-color ring format-spec tramp-loaddefs regexp-opt preamble-server
server preamble-mouse preamble-mode-line preamble-minibuffer savehist
icomplete preamble-keyboard preamble-initialization preamble-frames
preamble-files uniquify advice help-fns advice-preload autorevert
preamble-env preamble-editing paren delsel edmacro kmacro preamble-data
saveplace preamble-browse-url preamble-bookmarks preamble-utils
time-date tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd
tool-bar dnd fontset image fringe lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process dbusbind dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)