Function: hpath:substitute-value
hpath:substitute-value is a byte-compiled function defined in
hpath.el.
Signature
(hpath:substitute-value PATH)
Documentation
Substitute values for Emacs Lisp variables and environment variables in PATH.
Return the resulting PATH. Format of path-type variables must be "${variable-name}"; other, single-valued variables may be given as "$variable-name".
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hpath.el
(defun hpath:substitute-value (path)
"Substitute values for Emacs Lisp variables and environment variables in PATH.
Return the resulting PATH.
Format of path-type variables must be \"${variable-name}\"; other,
single-valued variables may be given as \"$variable-name\"."
;; Algorithm
;; 1. Extract all ${} and $ vars into a reverse order list and save start and end points.
;; 2. Get value of each var.
;; 3. For each string var not containing [:;], replace its var-name with var value.
;; 4. Run hpath:return-one-value on this reversed list.
(let ((start 0)
(new-path (copy-sequence path))
multi-dir-vars
var-name
var-start
var-end
var-value
result)
(while (and (< start (length new-path))
(string-match hpath:variable-regexp new-path start))
(setq var-name (match-string 1 new-path)
var-start (match-beginning 0)
var-end (match-end 0)
var-value (save-match-data (hpath:get-single-string-variable-value var-name)))
(if var-value
(setq new-path (hpath:return-one-value new-path t)
start (+ var-start (length var-value)))
(setq multi-dir-vars (cons var-name multi-dir-vars)
start var-end)))
(while multi-dir-vars
(setq result nil
var-name (car multi-dir-vars)
multi-dir-vars (cdr multi-dir-vars))
(while (and (not result)
(string-match hpath:variable-regexp new-path))
;; Match multi-dir-vars in reverse order so can
;; match each var to a path without other variables.
(when (string-equal (match-string 1 new-path)
var-name)
(setq result (hpath:return-one-value new-path t)
new-path (if (string-empty-p result) new-path result)))))
new-path))