]> code.delx.au - gnu-emacs-elpa/blobdiff - dired-async.el
Handle errors file by file instead of returning on first error.
[gnu-emacs-elpa] / dired-async.el
index 3f62cd58dd915835930c2c2b9f25905cad6c45b2..a6a1add7dbb7869849cc961e91be5993d7eb3d86 100644 (file)
@@ -153,9 +153,10 @@ Should take same args as `message'."
                            (dired-plural-s total))))
            ;; Finally send the success message.
            (funcall dired-async-message-function
-                    "Asynchronous %s of %s file(s) on %s file(s) done"
+                    "Asynchronous %s of %s on %s file%s done"
                     'dired-async-message
-                    (car operation) (cadr operation) total))))))
+                    (car operation) (cadr operation)
+                    total (dired-plural-s total)))))))
 
 (defun dired-async-maybe-kill-ftp ()
   "Return a form to kill ftp process in child emacs."
@@ -267,7 +268,6 @@ ESC or `q' to not overwrite any of the remaining files,
       (async-start `(lambda ()
                       (require 'cl-lib) (require 'dired-aux) (require 'dired-x)
                       ,(async-inject-variables dired-async-env-variables-regexp)
-                      (condition-case err
                           (let ((dired-recursive-copies (quote always))
                                 (dired-copy-preserve-time
                                  ,dired-copy-preserve-time))
@@ -294,11 +294,14 @@ ESC or `q' to not overwrite any of the remaining files,
                             ;; Now run the FILE-CREATOR function on files.
                             (cl-loop with fn = (quote ,file-creator)
                                      for (from . dest) in (quote ,async-fn-list)
-                                     do (funcall fn from dest t)))
-                        (file-error
-                         (dired-log "%s: %s\n" (car err) (cdr err))
-                         (dired-log t)
-                         (with-current-buffer dired-log-buffer
+                                     do (condition-case err
+                                            (funcall fn from dest t)
+                                          (file-error
+                                           (dired-log "%s: %s\n" (car err) (cdr err)))
+                                          nil))
+                        (when (get-buffer dired-log-buffer)
+                          (dired-log t)
+                          (with-current-buffer dired-log-buffer
                            (write-region (point-min) (point-max)
                                          ,dired-async-log-file))))
                       ,(dired-async-maybe-kill-ftp))