Mercurial > emacs
changeset 44648:6c3a3cb75b95
* dired-aux.el (dired-star-subst-regexp,
dired-quark-subst-regexp): New constants.
(dired-do-shell-command, dired-shell-stuff-it): Use them.
(dired-do-shell-command): Raise an error if both `*' and `?'
substitution marks are used in the same command.
(dired-shell-stuff-it): Substitute all instances of `*' and `?'
in a command given via dired-do-shell-command.
author | Francesco Potortì <pot@gnu.org> |
---|---|
date | Wed, 17 Apr 2002 09:54:47 +0000 |
parents | 844590891e89 |
children | 1bb925387b48 |
files | lisp/dired-aux.el |
diffstat | 1 files changed, 22 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/dired-aux.el Wed Apr 17 09:54:06 2002 +0000 +++ b/lisp/dired-aux.el Wed Apr 17 09:54:47 2002 +0000 @@ -43,6 +43,9 @@ ;;;###begin dired-cmd.el ;; Diffing and compressing +(defconst dired-star-subst-regexp "\\(^\\|[ \t]\\)\\*\\([ \t]\\|$\\)") +(defconst dired-quark-subst-regexp "\\(^\\|[ \t]\\)\\?\\([ \t]\\|$\\)") + ;;;###autoload (defun dired-diff (file &optional switches) "Compare file at point with file FILE using `diff'. @@ -102,7 +105,7 @@ (setq failures (dired-bunch-files 10000 (function dired-check-process) - (append + (append (list operation program new-attribute) (if (string-match "gnu" system-configuration) '("--") nil)) @@ -355,13 +358,15 @@ files) current-prefix-arg files))) - (let* ((on-each (not (string-match "\\(^\\|[ \t]\\)\\*\\([ \t]\\|$\\)" command))) - (subst (not (string-match "\\(^\\|[ \t]\\)\\?\\([ \t]\\|$\\)" command))) + (let* ((on-each (not (string-match dired-star-subst-regexp command))) + (subst (not (string-match dired-quark-subst-regexp command))) (star (not (string-match "\\*" command))) (qmark (not (string-match "\\?" command)))) ;; Get confirmation for wildcards that may have been meant ;; to control substitution of a file name or the file name list. - (if (cond ((and star (not on-each)) + (if (cond ((not (or on-each subst)) + (error "You can not combine `*' and `?' substitution marks")) + ((and star (not on-each)) (y-or-n-p "Confirm--do you mean to use `*' as a wildcard? ")) ((and qmark (not subst)) (y-or-n-p "Confirm--do you mean to use `?' as a wildcard? ")) @@ -395,15 +400,15 @@ ;; (coming from interactive P and currently ignored) to decide what to do. ;; Smart would be a way to access basename or extension of file names. (let ((stuff-it - (cond ((string-match "\\(^\\|[ \t]\\)\\*\\([ \t]\\|$\\)" command) - (lambda (x) - (string-match "\\(^\\|[ \t]\\)\\(\\*\\)\\([ \t]\\|$\\)" command) - (replace-match x t t command 2))) - ((string-match "\\(^\\|[ \t]\\)\\?\\([ \t]\\|$\\)" command) - (lambda (x) - (string-match "\\(^\\|[ \t]\\)\\(\\?\\)\\([ \t]\\|$\\)" command) - (replace-match x t t command 2))) - (t (lambda (x) (concat command dired-mark-separator x)))))) + (if (or (string-match dired-star-subst-regexp command) + (string-match dired-quark-subst-regexp command)) + (lambda (x) + (let ((retval command)) + (while (string-match + "\\(^\\|[ \t]\\)\\([*?]\\)\\([ \t]\\|$\\)" retval) + (setq retval (replace-match x t t retval 2))) + retval)) + (lambda (x) (concat command dired-mark-separator x))))) (if on-each (mapconcat stuff-it (mapcar 'shell-quote-argument file-list) ";") (let ((files (mapconcat 'shell-quote-argument @@ -576,7 +581,7 @@ (setq suffix (car suffixes) suffixes nil)) (setq suffixes (cdr suffixes)))) ;; If so, compute desired new name. - (if suffix + (if suffix (setq newname (concat (substring file 0 (match-beginning 0)) (nth 1 suffix)))) (cond (handler @@ -847,7 +852,7 @@ ;; It inserts the file's absolute name, rather than ;; the relative one. That may be hard to fix since it ;; is probably controlled by something in ftp. - (goto-char opoint) + (goto-char opoint) (let ((inserted-name (dired-get-filename 'verbatim))) (if (file-name-directory inserted-name) (progn @@ -2013,9 +2018,9 @@ (defun dired-show-file-type (file &optional deref-symlinks) "Print the type of FILE, according to the `file' command. If FILE is a symbolic link and the optional argument DEREF-SYMLINKS is -true then the type of the file linked to by FILE is printed instead." +true then the type of the file linked to by FILE is printed instead." (interactive (list (dired-get-filename t) current-prefix-arg)) - (with-temp-buffer + (with-temp-buffer (if deref-symlinks (call-process "file" nil t t "-L" file) (call-process "file" nil t t file))