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)))