-;;----------------------------------------------------------------------
-;; Quoting process args
-;;--------------------
-
-(defun nt-quote-args-verbatim (args)
- "Copy ARG list verbatim, separating each arg with space."
- (mapconcat #'identity args " "))
-
-(defun nt-quote-args-prefix-quote (prefix args)
- (mapconcat (lambda (str)
- (concat "\""
- (mapconcat (lambda (ch)
- (concat (if (eq ch ?\") prefix)
- (char-to-string ch)))
- str nil)
- "\""))
- args " "))
-
-(defun nt-quote-args-backslash-quote (args)
- "Place ARG list in quotes, prefixing quotes in args with backslashes."
- (nt-quote-args-prefix-quote "\\" args))
-
-(defun nt-quote-args-double-quote (args)
- "Place ARG list in quotes, doubling quotes in args."
- (nt-quote-args-prefix-quote "\"" args))
-
-(defvar nt-quote-args-functions-alist
- '(("^.?.?sh\\." . nt-quote-args-double-quote))
- "An alist for determining proper argument quoting given executable file name.
-Car of each cons must be a string, a regexp against which a file name sans
-directory is matched. Cdr is a function symbol. The list is mathced in
-forward order, and mathcing entry cdr's funcrion is called with a list of
-strings, process arguments. It must return a string which is passed to
-the newly created process.
-
-If not found, then `nt-quote-args-verbatim' is called on the argument list.")
-
-(defun nt-quote-process-args (args)
- ;;Properly quote process ARGS for executing (car ARGS).
- (let ((fname (file-name-nondirectory (car args)))
- (alist nt-quote-args-functions-alist)
- (case-fold-search nil)
- (return-me nil)
- (assoc nil))
- (while (and alist
- (null return-me))
- (setq assoc (pop alist))
- (if (string-match (car assoc) fname)
- (setq return-me (funcall (cdr assoc) (cdr args)))))
- (or return-me
- (nt-quote-args-verbatim (cdr args)))))
-