Vedang Manerikar: 1 Fix: Handle no-matching-files in denote-sort-dired 1 files changed, 20 insertions(+), 19 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~protesilaos/denote/patches/47625/mbox | git am -3Learn more about email & git
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. --- denote-sort.el | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/denote-sort.el b/denote-sort.el index ac3fed5..c2face4 100644 --- a/denote-sort.el +++ b/denote-sort.el @@ -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 -- 2.43.0
Thank you Vedang! I installed your patch. Then made a few tweaks on top to use 'if-let' and change what is shown in the final 'message'.