Function: dired-file-name-at-point
dired-file-name-at-point is a byte-compiled function defined in
dired.el.gz.
Signature
(dired-file-name-at-point)
Documentation
Try to get a file name at point in the current Dired buffer.
This hook is intended to be put in file-name-at-point-functions.
Note that it returns an abbreviated name that can't be used
as an argument to dired-goto-file.
Source Code
;; Defined in /usr/src/emacs/lisp/dired.el.gz
;; We want to switch to a more sophisticated version of
;; dired-read-dir-and-switches like the following, if there is a way
;; to make it more intuitive. See bug#1285.
;; (defun dired-read-dir-and-switches (str)
;; ;; For use in interactive.
;; (reverse
;; (list
;; (if current-prefix-arg
;; (read-string "Dired listing switches: "
;; dired-listing-switches))
;; ;; If a dialog is about to be used, call read-directory-name so
;; ;; the dialog code knows we want directories. Some dialogs can
;; ;; only select directories or files when popped up, not both.
;; (if (next-read-file-uses-dialog-p)
;; (read-directory-name (format "Dired %s(directory): " str)
;; nil default-directory nil)
;; (let ((cie ()))
;; (dolist (ext completion-ignored-extensions)
;; (if (eq ?/ (aref ext (1- (length ext)))) (push ext cie)))
;; (setq cie (concat (regexp-opt cie "\\(?:") "\\'"))
;; (let* ((default (and buffer-file-name
;; (abbreviate-file-name buffer-file-name)))
;; (cie cie)
;; (completion-table
;; ;; We need a mix of read-file-name and
;; ;; read-directory-name so that completion to directories
;; ;; is preferred, but if the user wants to enter a global
;; ;; pattern, he can still use completion on filenames to
;; ;; help him write the pattern.
;; ;; Essentially, we want to use
;; ;; (completion-table-with-predicate
;; ;; 'read-file-name-internal 'file-directory-p nil)
;; ;; but that doesn't work because read-file-name-internal
;; ;; does not obey its `predicate' argument.
;; (completion-table-in-turn
;; (lambda (str pred action)
;; (let ((read-file-name-predicate
;; (lambda (f)
;; (and (not (member f '("./" "../")))
;; ;; Hack! Faster than file-directory-p!
;; (eq (aref f (1- (length f))) ?/)
;; (not (string-match cie f))))))
;; (complete-with-action
;; action 'read-file-name-internal str nil)))
;; 'read-file-name-internal)))
;; (minibuffer-with-setup-hook
;; (lambda ()
;; (setq minibuffer-default default)
;; (setq minibuffer-completion-table completion-table))
;; (read-file-name (format "Dired %s(directory): " str)
;; nil default-directory nil))))))))
(defun dired-file-name-at-point ()
"Try to get a file name at point in the current Dired buffer.
This hook is intended to be put in `file-name-at-point-functions'.
Note that it returns an abbreviated name that can't be used
as an argument to `dired-goto-file'."
(let ((filename (dired-get-filename nil t)))
(when filename
(if (file-directory-p filename)
(file-name-as-directory (abbreviate-file-name filename))
(abbreviate-file-name filename)))))