From: Chong Yidong Date: Sat, 28 Jan 2012 13:58:46 +0000 (+0800) Subject: Quote file name commands in eshell. X-Git-Tag: emacs-pretest-24.0.93~22 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=93376c5baf50aab8e5095c083ad11dcf9caff36a;p=emacs.git Quote file name commands in eshell. * lisp/eshell/esh-arg.el (eshell-quote-argument): New function. * lisp/eshell/esh-ext.el (eshell-invoke-batch-file): * lisp/eshell/em-unix.el (eshell/cat, eshell/du): Use it to quote the first arg to eshell-parse-command. Fixes: debbugs:10523 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c374c71db38..8bde5f91046 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-01-28 Chong Yidong + + * eshell/esh-arg.el (eshell-quote-argument): New function. + + * eshell/esh-ext.el (eshell-invoke-batch-file): + * eshell/em-unix.el (eshell/cat, eshell/du): Use it to quote the + first arg to eshell-parse-command (Bug#10523). + 2012-01-28 Drew Adams * net/ange-ftp.el (ange-ftp-canonize-filename): Check, that diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 296e2ee8b24..6ac53e30e86 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -599,7 +599,7 @@ symlink, then revert to the system's definition of cat." (let ((ext-cat (eshell-search-path "cat"))) (if ext-cat (throw 'eshell-replace-command - (eshell-parse-command ext-cat args)) + (eshell-parse-command (eshell-quote-argument ext-cat) args)) (if eshell-in-pipeline-p (error "Eshell's `cat' does not work in pipelines") (error "Eshell's `cat' cannot display one of the files given")))) @@ -855,7 +855,7 @@ external command." (file-remote-p (expand-file-name arg) 'method) "ftp") (throw 'have-ange-path t)))))) (throw 'eshell-replace-command - (eshell-parse-command ext-du args)) + (eshell-parse-command (eshell-quote-argument ext-du) args)) (eshell-eval-using-options "du" args '((?a "all" nil show-all diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index 8143f2d65be..ad52a5d4a71 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -202,6 +202,18 @@ If POS is nil, the location of point is checked." (or (= pos (point-max)) (memq (char-after pos) eshell-delimiter-argument-list)))) +(defun eshell-quote-argument (string) + "Return STRING with magic characters quoted. +Magic characters are those in `eshell-special-chars-outside-quoting'." + (let ((index 0)) + (mapconcat (lambda (c) + (prog1 + (or (eshell-quote-backslash string index) + (char-to-string c)) + (setq index (1+ index)))) + string + ""))) + ;; Argument parsing (defun eshell-parse-arguments (beg end) diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index a33ccc82978..cf57a1dce79 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -108,7 +108,9 @@ wholly ignored." ;; argument... (setcar args (subst-char-in-string ?/ ?\\ (car args))) (throw 'eshell-replace-command - (eshell-parse-command eshell-windows-shell-file (cons "/c" args)))) + (eshell-parse-command + (eshell-quote-argument eshell-windows-shell-file) + (cons "/c" args)))) (defcustom eshell-interpreter-alist (if (eshell-under-windows-p)