Fix: Handle no-matching-files in denote-sort-dired

Where there are no files matching the input regex,
`denote-sort-get-directory-files` returns nil. Passing this to `dired`
throws an error:
```
(file-missing "Reading directory" "No such file or directory" ".../denote/Testing Dired")
```

This commit handles the empty case by returning an appropriate error
message.
This commit is contained in:
Vedang Manerikar 2023-12-11 11:51:03 +05:30 committed by Protesilaos Stavrou
parent dec04ce383
commit 96e5161051
No known key found for this signature in database
GPG key ID: 99BD6459CD5CA3EA

View file

@ -174,26 +174,27 @@ a non-nil value, respectively."
(denote-sort-component-prompt)
(y-or-n-p "Reverse sort? ")))
(let* ((default-directory (denote-directory))
;; NOTE 2023-12-04: Passing the FILES-MATCHING-REGEXP here produces
;; an error if the regexp contains a wildcard for a directory. I
;; can reproduce this in emacs -Q and am not sure if it is a bug.
;; Anyway, I will report it upstream, but even if it is fixed we
;; cannot use it for now (whatever fix will be available for Emacs
;; 30+).
;;
;; (format "Denote sort `%s' by `%s'" files-matching-regexp sort-by-component)
;; NOTE 2023-12-04: Passing the FILES-MATCHING-REGEXP as
;; buffer-name produces an error if the regexp contains a
;; wildcard for a directory. I can reproduce this in emacs -Q
;; and am not sure if it is a bug. Anyway, I will report it
;; upstream, but even if it is fixed we cannot use it for now
;; (whatever fix will be available for Emacs 30+).
(denote-sort-dired-buffer-name (format "Denote sort `%s' by `%s'" files-matching-regexp sort-by-component))
(buffer-name (format "Denote sort by `%s' at %s" sort-by-component (format-time-string "%T")))
(files (denote-sort-get-directory-files files-matching-regexp sort-by-component reverse))
(dired-buffer (dired (cons buffer-name (mapcar #'file-relative-name files)))))
(setq denote-sort--dired-buffer dired-buffer)
(with-current-buffer dired-buffer
(setq-local revert-buffer-function
(lambda (&rest _)
(kill-buffer dired-buffer)
(denote-sort-dired files-matching-regexp sort-by-component reverse)))))
;; Because of the above NOTE, I am printing a message. Not what I
;; want, but it is better than nothing...
(message "Denote sort `%s' by `%s'" files-matching-regexp sort-by-component))
(files (denote-sort-get-directory-files files-matching-regexp sort-by-component reverse)))
(if (car files)
(let ((dired-buffer (dired (cons buffer-name (mapcar #'file-relative-name files)))))
(setq denote-sort--dired-buffer dired-buffer)
(with-current-buffer dired-buffer
(setq-local revert-buffer-function
(lambda (&rest _)
(kill-buffer dired-buffer)
(denote-sort-dired files-matching-regexp sort-by-component reverse))))
;; Because of the above NOTE, I am printing a message. Not what I
;; want, but it is better than nothing...
(message denote-sort-dired-buffer-name))
(message "No matching files for %s" denote-sort-dired-buffer-name))))
(provide 'denote-sort)
;;; denote-sort.el ends here