Function: ediff-read-file-name

ediff-read-file-name is a byte-compiled function defined in ediff-util.el.gz.

Signature

(ediff-read-file-name PROMPT DEFAULT-DIR DEFAULT-FILE &optional NO-DIRS)

Source Code

;; Defined in /usr/src/emacs/lisp/vc/ediff-util.el.gz
;; This is adapted from a similar function in `emerge.el'.
;; PROMPT should not have a trailing ': ', so that it can be modified
;; according to context.
;; If DEFAULT-FILE is set, it should be used as the default value.
;; If DEFAULT-DIR is non-nil, use it as the default directory.
;; Otherwise, use the value of `default-directory.'
(defun ediff-read-file-name (prompt default-dir default-file &optional no-dirs)
  ;; hack default-dir if it is not set
  (setq default-dir
	(file-name-as-directory
	 (ediff-abbreviate-file-name
	  (expand-file-name (or default-dir
				(and default-file
				     (file-name-directory default-file))
				default-directory)))))

  ;; strip the directory from default-file
  (if default-file
      (setq default-file (file-name-nondirectory default-file)))
  (if (string= default-file "")
      (setq default-file nil))

  (let ((defaults (and (fboundp 'dired-dwim-target-defaults)
		       (dired-dwim-target-defaults
			(and default-file (list default-file))
			default-dir)))
	f)
    (setq f (minibuffer-with-setup-hook
		(lambda () (when defaults
			     (setq minibuffer-default defaults)))
	      (read-file-name
               (format-prompt prompt (or default-file default-dir))
	       default-dir
	       (or default-file default-dir)
	       t			; must match, no-confirm
	       (if default-file (file-name-directory default-file)))))
    (setq f (expand-file-name f default-dir))
    ;; If user entered a directory name, expand the default file in that
    ;; directory.  This allows the user to enter a directory name for the
    ;; B-file and diff against the default-file in that directory instead
    ;; of a DIRED listing!
    (if (and (file-directory-p f) default-file)
	(setq f (expand-file-name
		 (file-name-nondirectory default-file) f)))
    (if (and no-dirs (file-directory-p f))
	(user-error "File %s is a directory" f))
    f))