# HG changeset patch # User Richard M. Stallman # Date 739401196 0 # Node ID bedf7049667a600ab15a29b30de52c007036bac3 # Parent a9967fc643c51fae741ce1e53bb2388182c14935 (dired-unmark-all-files): Read arg as just a character. Use non-regexp search to find a specific mark. Use subst-char-in-region to make the change. Improve the message at the end. diff -r a9967fc643c5 -r bedf7049667a lisp/dired.el --- a/lisp/dired.el Sun Jun 06 17:44:23 1993 +0000 +++ b/lisp/dired.el Sun Jun 06 21:13:16 1993 +0000 @@ -1770,26 +1770,32 @@ (match-end 0) old new)))))) (defun dired-unmark-all-files (mark &optional arg) - "Remove a specific mark or any mark from every file. + "Remove a specific mark (or any mark) from every file. +After this command, type the mark character to remove, +or type RET to remove all marks. With prefix arg, query for each marked file. Type \\[help-command] at that time for help." - (interactive "sRemove marks (RET means all): \nP") - (let ((count 0) - (re (if (zerop (length mark)) dired-re-mark - (concat "^" (regexp-quote mark))))) - (save-excursion - (let (buffer-read-only case-fold-search query - (help-form "\ + (interactive "cRemove marks (RET means all): \nP") + (save-excursion + (let* ((count 0) + buffer-read-only case-fold-search query + (string (format "\n%c" mark)) + (help-form "\ Type SPC or `y' to unmark one file, DEL or `n' to skip to next, `!' to unmark all remaining files with no more questions.")) - (goto-char (point-min)) - (while (re-search-forward re nil t) - (if (or (not arg) - (dired-query 'query "Unmark file `%s'? " - (dired-get-filename t))) - (progn (delete-char -1) (insert " ") (setq count (1+ count)))) - (forward-line 1)))) - (message "%s" (format "Marks removed: %d %s" count mark)))) + (goto-char (point-min)) + (while (if (eq mark ?\r) + (re-search-forward dired-re-mark nil t) + (search-forward string nil t)) + (if (or (not arg) + (dired-query 'query "Unmark file `%s'? " + (dired-get-filename t))) + (progn (subst-char-in-region (1- (point)) (point) + (preceding-char) ?\ ) + (setq count (1+ count))))) + (message (if (= count 1) "1 mark removed" + "%d marks removed") + count)))) ;; Logging failures operating on files, and showing the results.