1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-27 10:54:40 +00:00

(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.
This commit is contained in:
Richard M. Stallman 1993-06-06 21:13:16 +00:00
parent 2ffe7ef250
commit b602ba2fac

View File

@ -1770,26 +1770,32 @@ OLD and NEW are both characters used to mark files."
(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.