summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/subr.el12
1 files changed, 12 insertions, 0 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index 9d6e4ac3228..fce4a56e79b 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -643,6 +643,18 @@ Wildcards and redirection are handle as usual in the shell."
(cons 'progn body)
(list 'store-match-data original)))))
+(defun shell-quote-argument (argument)
+ "Quote an argument for passing as argument to an inferior shell."
+ ;; Quote everything except POSIX filename characters.
+ ;; This should be safe enough even for really weird shells.
+ (let ((result "") (start 0) end)
+ (while (string-match "[^---0-9a-zA-Z_./]" argument start)
+ (setq end (match-beginning 0)
+ result (concat result (substring argument start end)
+ "\\" (substring argument end (1+ end)))
+ start (1+ end)))
+ (concat result (substring argument start))))
+
;; now in fns.c
;(defun nth (n list)
; "Returns the Nth element of LIST.