Function: hpath:prepend-shell-directory
hpath:prepend-shell-directory is a byte-compiled function defined in
hpath.el.
Signature
(hpath:prepend-shell-directory &optional FILENAME)
Documentation
Prepend subdir to an optional FILENAME in an 'ls'-file listing.
When in a shell buffer and on a filename result of an 'ls *' or recursive 'ls -R' or 'dir' command, prepend the subdir to the filename at point, or optional FILENAME, when needed and return it, else return nil.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hpath.el
(defun hpath:prepend-shell-directory (&optional filename)
"Prepend subdir to an optional FILENAME in an \\='ls'-file listing.
When in a shell buffer and on a filename result of an \\='ls *' or
recursive \\='ls -R' or \\='dir' command, prepend the subdir to the
filename at point, or optional FILENAME, when needed and return
it, else return nil."
(when (derived-mode-p #'shell-mode)
(let ((prior-prompt-pos (save-excursion (comint-previous-prompt 1) (1- (point))))
dir)
(unless (stringp filename)
(setq filename (thing-at-point 'filename t)))
(save-excursion
(when (and filename
(if (memq system-type '(windows-nt cygwin ms-dos))
;; Windows Cmd or PowerShell dir cmds
(and (re-search-backward "^\\s-*\\(cd \\|pushd \\|Directory: \\|Directory of \\)\\(.+\\)$" prior-prompt-pos t)
(setq dir (match-string-no-properties 2)))
;; POSIX
(or (and (re-search-backward "^$\\|\\`\\|^\\(.+\\):$" prior-prompt-pos t)
(setq dir (match-string-no-properties 1)))
(and (re-search-backward "\\(^\\| \\)\\(cd\\|pushd\\|ls\\)\\([ \t]+-[-a-zA-Z0-9]*\\)*[ \t]+[\'\"]?\\([^&!;,\'\"\t\n\r\f]+[^&!;,\'\" \t\n\r\f]\\)[\'\"]?" prior-prompt-pos t)
(setq dir (match-string-no-properties 4)))))
(and dir (not (string-empty-p dir))))
(unless (file-name-absolute-p filename)
;; If dir ends with a glob expression, then the dir is
;; already prepended to each file listing, the file name should simply be
;; expanded; otherwise, prepend the dir.
(if (and dir (string-match-p "\\*[^\\/\n\r]*$" dir))
(expand-file-name filename)
(when (file-directory-p dir)
(setq dir (file-name-as-directory dir)))
(when (and dir (not (string-empty-p dir)) (file-exists-p dir))
(expand-file-name filename dir)))))))))