- ((ido-final-slash contents) ;; xxx/
- (ido-trace "final slash" contents)
- (cond
- ((string-equal contents "~/")
- (ido-set-current-home)
- t)
- ((string-equal contents "../")
- (ido-up-directory t)
- t)
- ((string-equal contents "./")
- t)
- ((string-match contents "\\`~[a-zA-Z0-9]/\\'")
- (ido-set-current-home contents)
- t)
- ((string-match "[$][A-Za-z0-9_]+/\\'" contents)
- (let ((exp (condition-case ()
- (expand-file-name
- (substitute-in-file-name (substring contents 0 -1))
- ido-current-directory)
- (error nil))))
- (ido-trace contents exp)
- (if (and exp (file-directory-p exp))
- (progn
- (ido-set-current-directory (file-name-directory exp))
- (setq ido-text-init (file-name-nondirectory exp))
- t)
- nil)))
- ((and (memq system-type '(windows-nt ms-dos))
- (string-equal (substring contents 1) ":/"))
- (ido-set-current-directory (file-name-directory contents))
- t)
- ((string-equal (substring contents -2 -1) "/")
- (ido-set-current-directory
- (if (memq system-type '(windows-nt ms-dos))
- (expand-file-name "/" ido-current-directory)
- "/"))
- t)
- (t
- (setq try-single-dir-match t)
- nil)))
-
- ((and (string-equal ido-current-directory "/")
- (string-match "..:\\'" contents)) ;; Ange-ftp
- (ido-set-current-directory "/" contents)
- (when (ido-is-slow-ftp-host)
- (setq ido-exit 'fallback)
- (exit-minibuffer))
- t)
-
- ((and (string-equal (substring contents -2 -1) "/")
- (not (string-match "[$]" contents)))
- (ido-set-current-directory
- (cond
- ((= (length contents) 2)
- "/")
- (ido-matches
- (concat ido-current-directory (car ido-matches)))
- (t
- (concat ido-current-directory (substring contents 0 -1)))))
- (setq ido-text-init (substring contents -1))
- t)
-
- ((and (not ido-use-merged-list)
- (not (ido-final-slash contents))
- (eq ido-try-merged-list t)
- (numberp ido-auto-merge-work-directories-length)
- (> ido-auto-merge-work-directories-length 0)
- (= (length contents) ido-auto-merge-work-directories-length)
- (not (and ido-auto-merge-inhibit-characters-regexp
- (string-match ido-auto-merge-inhibit-characters-regexp contents)))
- (not (input-pending-p)))
- (setq ido-use-merged-list 'auto
- ido-text-init contents
- ido-rotate-temp t)
- t))
- (progn
- (ido-trace "refresh on /" ido-text-init)
- (setq ido-exit 'refresh)
- (exit-minibuffer)))
-
- ;; Update the list of matches
- (setq ido-text contents)
- (ido-set-matches)
- (ido-trace "new " ido-matches)
-
- (when (and ido-enter-single-matching-directory
- ido-matches
- (null (cdr ido-matches))
- (ido-final-slash (car ido-matches))
- (or try-single-dir-match
- (eq ido-enter-single-matching-directory t)))
- (ido-trace "single match" (car ido-matches))
- (ido-set-current-directory