Function: ido-make-merged-file-list-1

ido-make-merged-file-list-1 is a byte-compiled function defined in ido.el.gz.

Signature

(ido-make-merged-file-list-1 TEXT AUTO WIDE)

Source Code

;; Defined in /usr/src/emacs/lisp/ido.el.gz
(defun ido-make-merged-file-list-1 (text auto wide)
  (let (res)
    (if (and (ido-final-slash text) ido-dir-file-cache)
	(if wide
	    (setq res (ido-wide-find-dirs-or-files
		       ido-current-directory (substring text 0 -1) ido-enable-prefix t))
	  ;; Use list of cached directories
	  (let ((re (concat (regexp-quote (substring text 0 -1)) "[^/:]*/\\'"))
		(dirs ido-dir-file-cache)
		dir b d f)
	    (if nil ;; simple
		(while dirs
		  (setq dir (car (car dirs))
			dirs (cdr dirs))
		  (when (and (string-match re dir)
			     (not (ido-ignore-item-p dir ido-ignore-directories-merge))
			     (file-directory-p dir))
		    (setq b (substring dir 0 -1)
			  f (concat (file-name-nondirectory b) "/")
			  d (file-name-directory b)
			  res (cons (cons f d) res))))
	      (while dirs
		(setq dir (car dirs)
		      d (car dir)
		      dirs (cdr dirs))
		(when (not (ido-ignore-item-p d ido-ignore-directories-merge))
		  (setq dir (cdr (cdr dir)))
		  (while dir
		    (setq f (car dir)
			  dir (cdr dir))
		    (if (and (string-match re f)
			     (not (ido-ignore-item-p f ido-ignore-directories)))
			(setq res (cons (cons f d) res)))))
		(if (and auto (input-pending-p))
		    (setq dirs nil
			  res t))))))
      (if wide
	  (setq res (ido-wide-find-dirs-or-files
		     ido-current-directory text ido-enable-prefix nil))
	(let ((ido-text text)
	      (dirs ido-work-directory-list)
	      (must-match (and text (> (length text) 0)))
	      dir fl)
	  (if (and auto (not (member ido-current-directory dirs)))
	      (setq dirs (cons ido-current-directory dirs)))
	  (while dirs
	    (setq dir (car dirs)
		  dirs (cdr dirs))
	    (when (and dir (stringp dir)
		       (or ido-merge-ftp-work-directories
			   (not (ido-is-ftp-directory dir)))
		       (file-directory-p dir)
		       ;; TODO. check for nonreadable and too-big.
		       (setq fl (if (eq ido-cur-item 'file)
				    (ido-make-file-list-1 dir t)
				  (ido-make-dir-list-1 dir t))))
	      (if must-match
		  (setq fl (ido-set-matches-1 fl)))
	      (if fl
		  (setq res (nconc fl res))))
	    (if (and auto (input-pending-p))
		(setq dirs nil
		      res t))))))
    res))