From bc3dcd524dfb5c889ed017c093eaf028596fc35c Mon Sep 17 00:00:00 2001 From: Tino Calancha Date: Mon, 3 Jul 2017 12:55:06 +0900 Subject: [PATCH] dired-do-shell-command: Fix check for wildcards * lisp/dired-aux.el (dired-do-shell-command): Replace just '?', '*' and '`?' i.e., keep the whitespaces. * test/lisp/dired-aux-tests.el (dired-test-bug27496): Add test. --- lisp/dired-aux.el | 2 +- test/lisp/dired-aux-tests.el | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 test/lisp/dired-aux-tests.el diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 12a97f8457e..e4547758587 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -738,7 +738,7 @@ can be produced by `dired-get-marked-files', for example." ;; Drop all ? and * surrounded by spaces and `?`. (while (and (string-match regexp res) (dired--star-or-qmark-p res str)) - (setq res (replace-match "" t t res 0))) + (setq res (replace-match "" t t res 2))) (string-match regexp res)))) (let* ((on-each (not (dired--star-or-qmark-p command "*" 'keep))) (no-subst (not (dired--star-or-qmark-p command "?" 'keep))) diff --git a/test/lisp/dired-aux-tests.el b/test/lisp/dired-aux-tests.el new file mode 100644 index 00000000000..9e02af272b6 --- /dev/null +++ b/test/lisp/dired-aux-tests.el @@ -0,0 +1,44 @@ +;;; dired-aux-tests.el --- Test suite for dired-aux. -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: +(require 'ert) +(require 'dired-aux) + + +(ert-deftest dired-test-bug27496 () + "Test for http://debbugs.gnu.org/27496 ." + (skip-unless (executable-find shell-file-name)) + (let* ((foo (make-temp-file "foo")) + (files (list foo))) + (unwind-protect + (cl-letf (((symbol-function 'y-or-n-p) 'error)) + (dired temporary-file-directory) + (dired-goto-file foo) + ;; `dired-do-shell-command' returns nil on success. + (should-error (dired-do-shell-command "ls ? ./?" nil files)) + (should-error (dired-do-shell-command "ls ./? ?" nil files)) + (should-not (dired-do-shell-command "ls ? ?" nil files)) + (should-error (dired-do-shell-command "ls * ./*" nil files)) + (should-not (dired-do-shell-command "ls * *" nil files)) + (should-not (dired-do-shell-command "ls ? ./`?`" nil files))) + (delete-file foo)))) + +(provide 'dired-aux-tests) +;; dired-aux-tests.el ends here -- 2.39.2