commit 7686a417076d70a33652e41c0fd1913f2d13a5d6 parent 05a1ff4ad8e53ead6c42a2169bcd72bbe6366bc5 Author: andsy10 <andsy1016@gmail.com> Date: Mon, 19 Oct 2026 16:39:28 +0800 Add minor mode to hide excluded denote files in dired Diffstat:
| M | lisp/init-org.el | | | 50 | ++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 50 insertions(+), 0 deletions(-)
diff --git a/lisp/init-org.el b/lisp/init-org.el @@ -116,6 +116,7 @@ :hook (find-file . denote-rename-buffer-mode) (dired-mode . denote-dired-mode) + (denote-dired-mode . my-denote-dired-exclude-mode) :autoload denote-retrieve-filename-identifier denote-file-prompt :init (defvar denote-directory) @@ -186,6 +187,55 @@ (apply fun file file-type args))) (advice-add #'denote-link :around #'my-denote-link-image-fix) + (defun my-denote-dired-exclude--hide () + "Determine the lines to be hidden and hide them." + (save-excursion + (goto-char (point-min)) + (let ((marked-files (dired-get-marked-files))) + (my-denote-dired-exclude--remove-all-marks) + (dolist (file (my-denote-dired-exclude--excluded-files)) + (setq file (file-relative-name file)) + (setq marked-files (delete (my-denote-dired-exclude--mark-file file) marked-files))) + (dired-do-kill-lines nil "") + (my-denote-dired-exclude--restore-marks marked-files)))) + + (defun my-denote-dired-exclude--remove-all-marks () + (save-excursion + (let ((inhibit-read-only t)) + (goto-char (point-min)) + (while (re-search-forward dired-re-mark nil t) + (subst-char-in-region (1- (point)) (point) (preceding-char) ?\s))))) + + (defun my-denote-dired-exclude--restore-marks (marked-files) + (dolist (file marked-files) + (dired-goto-file file) + (dired-mark 1))) + + (defun my-denote-dired-exclude--mark-file (file) + (let ((absolute-file (concat (expand-file-name default-directory) file))) + (when (and (file-exists-p absolute-file) + (dired-goto-file absolute-file)) + (dired-mark 1)) + absolute-file)) + + (defun my-denote-dired-exclude--excluded-files () + (seq-filter + (lambda (file) + (and (file-regular-p file) + (denote-file-has-denoted-filename-p file) + (denote--file-excluded-p file) + (not (backup-file-name-p file)))) + (denote--directory-all-files-recursively))) + + (define-minor-mode my-denote-dired-exclude-mode + "Toggle `my-denote-dired-exclude-mode'." + :init-value nil + :group 'denote-dired + (if my-denote-dired-exclude-mode + (add-hook 'dired-after-readin-hook #'my-denote-dired-exclude--hide) + (remove-hook 'dired-after-readin-hook #'my-denote-dired-exclude--hide)) + (revert-buffer)) + (setq denote-directory my-org-directory denote-org-store-link-to-heading 'context denote-date-prompt-use-org-read-date t