          (project-dir (concat download-dir (file-name-base url)))
          (default-directory download-dir))
     (when (or (not (file-exists-p project-dir))
-              (when (y-or-n-p (format "%s exists. delete?" (file-name-base url)))
+              (when (y-or-n-p (format "%s exists.  delete?" (file-name-base url)))
                 (delete-directory project-dir t)
                 t))
       (dwim-shell-command-on-marked-files

      (set-process-filter proc #'dwim-shell-command--filter))))

(defun dwim-shell-command--expand (template file &optional post-process-template)
  "Expand TEMPLATE, using <<f>> for FILE, <<fne>> for FILE without
 extension, and <<e>> for FILE extension."
  (setq file (expand-file-name file))
  ;; "<<fne>>_other_<<e>>" with "/path/file.jpg" -> "'/path/file_other.jpg'"
  (setq template (replace-regexp-in-string "[[:blank:]]\\(\\(\<\<fne\>\>\\)\\([^ \n]+\\)\\(\<\<e\>\>\\)\\)"

(require 'dired-aux)
(require 'seq)

;;; Commentary:

;; Provides `dwim-shell-command' as a DWIM alternative to
;; `shell-command'.
;;
;; Use `dwim-shell-command-on-marked-files' to create your own command
;; line utilities, invoked via M-x.
;;
;; See `dwim-shell-command-convert-audio-to-mp3' or
;; `dwim-shell-command-pdf-password-protect' as examples.

;;; Code:

(defvar dwim-shell-command--commands nil "All commands in progress.")

(cl-defstruct
    dwim-shell-command--command
