summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-10 13:44:40 -0500
committerCraig Jennings <c@cjennings.net>2026-05-10 13:44:40 -0500
commit13826423b1f69ff602fabf5fff0cdc8d9a80b241 (patch)
tree7643021bf9b1b3fb58e0585ce00744144a7b2831 /modules
parentf90ef0c42c8b59b9924e690c77231790346859a2 (diff)
downloaddotemacs-13826423b1f69ff602fabf5fff0cdc8d9a80b241.tar.gz
dotemacs-13826423b1f69ff602fabf5fff0cdc8d9a80b241.zip
refactor(dirvish): extract cj/--dired-line-is-directory-p
`cj/dired-mark-all-visible-files' classified the current line as a directory via `(looking-at "^. d")' inline. Lift the classification into `cj/--dired-line-is-directory-p', a string predicate that takes a line and returns non-nil when it's a directory listing. The wrapper still walks the dired buffer line by line and calls `dired-mark' -- that iteration is dired-coupled and stays untested -- but the format-aware predicate is now isolated and verified. Six Normal/Boundary tests cover unmarked directories, marked directories (`*' prefix), regular files (`-' instead of `d'), symlinks (`l'), empty lines, and dired header lines (` /path:' and ` total N').
Diffstat (limited to 'modules')
-rw-r--r--modules/dirvish-config.el17
1 files changed, 15 insertions, 2 deletions
diff --git a/modules/dirvish-config.el b/modules/dirvish-config.el
index ad2227e8..f032b1a0 100644
--- a/modules/dirvish-config.el
+++ b/modules/dirvish-config.el
@@ -180,14 +180,27 @@ used by `cj/dirvish-open-html-in-eww'."
;;; ------------------------ Dired Mark All Visible Files -----------------------
+(defun cj/--dired-line-is-directory-p (line)
+ "Return non-nil when LINE is a Dired listing of a directory.
+
+Dired prefixes each file line with a one-character mark column followed
+by `ls -l' output, so a directory line reads as `<mark> drwx...' (mark,
+space, `d'). Header lines (` /path/to:'), `total N' lines, and empty
+lines all fail this match.
+
+Pure helper used by `cj/dired-mark-all-visible-files'."
+ (and line (string-match-p "\\`. d" line)))
+
(defun cj/dired-mark-all-visible-files ()
"Mark all visible files in Dired mode."
(interactive)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
- (if (not (looking-at "^. d"))
- (dired-mark 1))
+ (let ((line (buffer-substring-no-properties
+ (line-beginning-position) (line-end-position))))
+ (unless (cj/--dired-line-is-directory-p line)
+ (dired-mark 1)))
(forward-line 1))))
;;; ------------------------ Dirvish Duplicate File Copy ------------------------