changeset 3524:bedf7049667a

(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.
author Richard M. Stallman <rms@gnu.org>
date Sun, 06 Jun 1993 21:13:16 +0000
parents a9967fc643c5
children 58e789baa27a
files lisp/dired.el
diffstat 1 files changed, 22 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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.