]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve error handling in dired-change-marks
authorStefan Kangas <stefankangas@gmail.com>
Sun, 19 Jan 2020 14:58:06 +0000 (15:58 +0100)
committerStefan Kangas <stefankangas@gmail.com>
Sun, 19 Jan 2020 14:59:33 +0000 (15:59 +0100)
* lisp/dired.el (dired-change-marks): Signal user-error if mark
character is invalid.  Catch more invalid characters.  (Bug#29842)

lisp/dired.el

index 46b35ba192d2eba079aadce9ca41d1970be9346a..98e3be722787008f821eb5ee9540f2c62b790ec6 100644 (file)
@@ -3868,19 +3868,21 @@ OLD and NEW are both characters used to mark files."
          (new (progn (message  "Change %c marks to (new mark): " old)
                      (read-char))))
      (list old new)))
-  (if (or (eq old ?\r) (eq new ?\r))
-      (ding)
-    (let ((string (format "\n%c" old))
-         (inhibit-read-only t))
-      (save-excursion
-       (goto-char (point-min))
-       (while (search-forward string nil t)
-         (if (if (= old ?\s)
-                 (save-match-data
-                   (dired-get-filename 'no-dir t))
-               t)
-             (subst-char-in-region (match-beginning 0)
-                                   (match-end 0) old new)))))))
+  (dolist (c (list new old))
+    (if (or (not (char-displayable-p c))
+            (eq c ?\r))
+        (user-error "Invalid mark character: `%c'" c)))
+  (let ((string (format "\n%c" old))
+        (inhibit-read-only t))
+    (save-excursion
+      (goto-char (point-min))
+      (while (search-forward string nil t)
+        (if (if (= old ?\s)
+                (save-match-data
+                  (dired-get-filename 'no-dir t))
+              t)
+            (subst-char-in-region (match-beginning 0)
+                                  (match-end 0) old new))))))
 
 (defun dired-unmark-all-marks ()
   "Remove all marks from all files in the Dired buffer."