Function: comint--unquote&requote-argument
comint--unquote&requote-argument is a byte-compiled function defined
in comint.el.gz.
Signature
(comint--unquote&requote-argument QSTR &optional UPOS)
Source Code
;; Defined in /usr/src/emacs/lisp/comint.el.gz
(defun comint--unquote&requote-argument (qstr &optional upos)
(unless upos (setq upos 0))
(let* ((qpos 0)
(ustrs '())
(re (concat
"\\$\\(?:\\([[:alpha:]][[:alnum:]]*\\)"
"\\|{\\(?1:[^{}]+\\)}\\)"
(when (memq system-type '(ms-dos windows-nt))
"\\|%\\(?1:[^\\/]*\\)%")
(when comint-file-name-quote-list
"\\|\\\\\\(.\\)")))
(qupos nil)
(push (lambda (str end)
(push str ustrs)
(setq upos (- upos (length str)))
(unless (or qupos (> upos 0))
(setq qupos (if (< end 0) (- end) (+ upos end))))))
match)
(while (setq match (string-match re qstr qpos))
(funcall push (substring qstr qpos match) match)
(cond
((match-beginning 2) (funcall push (match-string 2 qstr) (match-end 0)))
((match-beginning 1) (funcall push (getenv (match-string 1 qstr))
(- (match-end 0))))
(t (error "Unexpected case in comint--unquote&requote-argument!")))
(setq qpos (match-end 0)))
(funcall push (substring qstr qpos) (length qstr))
(list (mapconcat #'identity (nreverse ustrs) "")
qupos #'comint-quote-filename)))