From: Stefan Monnier Date: Sun, 28 Aug 2011 05:15:17 +0000 (-0400) Subject: * lisp/shell.el (shell-parse-pcomplete-arguments): Unquote args. X-Git-Tag: emacs-pretest-24.0.90~104^2~152^2~52 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=356a3681816a68e9222dcb8c470a0a7d0620f622;p=emacs.git * lisp/shell.el (shell-parse-pcomplete-arguments): Unquote args. Fixes: debbugs:9160 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a57fe75405..552c3f5c088 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2011-08-28 Stefan Monnier + + * shell.el (shell-parse-pcomplete-arguments): Unquote args (bug#9160). + 2011-08-27 Alan Mackenzie * progmodes/cc-menus.el (cc-imenu-c++-generic-expression): Make it diff --git a/lisp/shell.el b/lisp/shell.el index 01d1a688f0e..909ebb48afc 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -393,10 +393,28 @@ to `dirtrack-mode'." (while (< (point) end) (skip-chars-forward " \t\n") (push (point) begins) - (looking-at "\\(?:[^\s\t\n\\]\\|'[^']*'\\|\"\\(?:[^\"\\]\\|\\\\.\\)*\"\\|\\\\.\\)*\\(?:\\\\\\|'[^']*\\|\"\\(?:[^\"\\]\\|\\\\.\\)*\\)?") - (goto-char (match-end 0)) - (push (buffer-substring-no-properties (car begins) (point)) - args)) + (let ((arg ())) + (while (looking-at + (eval-when-compile + (concat + "\\(?:[^\s\t\n\\\"']+" + "\\|'\\([^']*\\)'?" + "\\|\"\\(\\(?:[^\"\\]\\|\\\\.\\)*\\)\"?" + "\\|\\\\\\(\\(?:.\\|\n\\)?\\)\\)"))) + (goto-char (match-end 0)) + (cond + ((match-beginning 3) ;Backslash escape. + (push (if (= (match-beginning 3) (match-end 3)) + "\\" (match-string 3)) + arg)) + ((match-beginning 2) ;Double quote. + (push (replace-regexp-in-string + "\\\\\\(.\\)" "\\1" (match-string 2)) + arg)) + ((match-beginning 1) ;Single quote. + (push (match-string 1) arg)) + (t (push (match-string 0) arg)))) + (push (mapconcat #'identity (nreverse arg) "") args))) (cons (nreverse args) (nreverse begins))))) (defun shell-completion-vars ()