changeset 35643:cafc43e2ccfd

(shell-unquote-argument): If the shell is one of the mentioned in shell-dumb-shell-regexp, don't treat a backslash as a quote character. (shell-dumb-shell-regexp): Document that the shells which match this regexp are supposed to not treat a backslash as a quote character.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 27 Jan 2001 12:41:59 +0000
parents 15b0b31760c7
children e504a8bd3e9a
files lisp/shell.el
diffstat 1 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/shell.el	Sat Jan 27 12:40:49 2001 +0000
+++ b/lisp/shell.el	Sat Jan 27 12:41:59 2001 +0000
@@ -122,9 +122,11 @@
 
 ;;;###autoload
 (defcustom shell-dumb-shell-regexp "cmd\\(proxy\\)?\\.exe"
-  "Regexp to match shells that don't save their command history.
-For shells that match this regexp, Emacs will write out the
-command history when the shell finishes."
+  "Regexp to match shells that don't save their command history, and
+don't handle the backslash as a quote character.  For shells that
+match this regexp, Emacs will write out the command history when the
+shell finishes, and won't remove backslashes when it unquotes shell
+arguments."
   :type 'regexp
   :group 'shell)
 
@@ -597,9 +599,15 @@
 (defun shell-unquote-argument (string)
   "Remove all kinds of shell quoting from STRING."
   (save-match-data
-    (let ((idx 0) next inside)
+    (let ((idx 0) next inside
+	  (quote-chars
+	   (if (string-match shell-dumb-shell-regexp
+			     (file-name-nondirectory
+			      (car (process-command (get-buffer-process (current-buffer))))))
+	       "['`\"]"
+	     "[\\'`\"]")))
       (while (and (< idx (length string))
-		  (setq next (string-match "[\\'`\"]" string next)))
+		  (setq next (string-match quote-chars string next)))
 	(cond ((= (aref string next) ?\\)
 	       (setq string (replace-match "" nil nil string))
 	       (setq next (1+ next)))