While working with the tramp maintainer to implement `tramp-rename-files` (which ido interferes with), I’ve found that ido does not respect `ido-read-file-name-non-ido` when a directory is being read instead of a filename. This happens for example if the `read-file-name` predicate is `file-directory-p`. I can’t see a use for ignoring specifically named commands for which the user wishes to disable ido simply because a directory instead of filename is being read. So this looks like a bug to me.
This could be solved easily by adding a check to the first `cond` stanza of `ido-read-file-name`:
(let (filename)
(cond
((and (not (memq this-command ido-read-file-name-non-ido))
(or (eq predicate 'file-directory-p)
(eq (and (symbolp this-command)
(get this-command 'ido)) 'dir)
(memq this-command ido-read-file-name-as-directory-commands)))