diff options
author | Tino Calancha <tino.calancha@gmail.com> | 2017-07-02 22:09:21 +0900 |
---|---|---|
committer | Tino Calancha <tino.calancha@gmail.com> | 2017-07-02 22:09:21 +0900 |
commit | 6e39940adba7b96dfe520caa52a1b92a1a84a84f (patch) | |
tree | 8dc1d4ce136badb6aad962a32b5b7cb766198bc5 /lisp/dired-aux.el | |
parent | a8b71b3dc53883a2dcb3339bf4c7e1232c42d276 (diff) | |
download | emacs-6e39940adba7b96dfe520caa52a1b92a1a84a84f.tar.gz |
Ask confirmation for all suspicious wildcards
* lisp/dired-aux.el (dired-do-shell-command): Check that all
the wildcards are right. Otherwise, ask for confirmation (Bug#27496).
Diffstat (limited to 'lisp/dired-aux.el')
-rw-r--r-- | lisp/dired-aux.el | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index a57e5db17b7..12a97f8457e 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -731,18 +731,27 @@ can be produced by `dired-get-marked-files', for example." (dired-read-shell-command "! on %s: " current-prefix-arg files) current-prefix-arg files))) + (cl-flet ((need-confirm-p + (cmd str) + (let ((res cmd) + (regexp (regexp-quote str))) + ;; 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))) + (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))) - (star (string-match-p "\\*" command)) - (qmark (string-match-p "\\?" command)) + (star (string-match "\\*" command)) + (qmark (string-match "\\?" command)) ;; Get confirmation for wildcards that may have been meant ;; to control substitution of a file name or the file name list. (ok (cond ((not (or on-each no-subst)) (error "You can not combine `*' and `?' substitution marks")) - ((and star on-each) + ((need-confirm-p command "*") (y-or-n-p (format-message "Confirm--do you mean to use `*' as a wildcard? "))) - ((and qmark no-subst) + ((need-confirm-p command "?") (y-or-n-p (format-message "Confirm--do you mean to use `?' as a wildcard? "))) (t)))) @@ -755,7 +764,7 @@ can be produced by `dired-get-marked-files', for example." nil file-list) ;; execute the shell command (dired-run-shell-command - (dired-shell-stuff-it command file-list nil arg)))))) + (dired-shell-stuff-it command file-list nil arg))))))) ;; Might use {,} for bash or csh: (defvar dired-mark-prefix "" |