aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-09 16:49:11 -0500
committerCraig Jennings <c@cjennings.net>2026-07-09 16:49:11 -0500
commitb9c966b400874aeb4dee365b94734d3f0fbac989 (patch)
tree5632a27c53800edccaf8a6ab10be988f798d7185
parent0bb5e68cf3edfbb9389318246a3af99645ceabce (diff)
downloaddotemacs-b9c966b400874aeb4dee365b94734d3f0fbac989.tar.gz
dotemacs-b9c966b400874aeb4dee365b94734d3f0fbac989.zip
fix(auto-dim): dim org headings, links, and tags in unfocused windows
org-level-1..8, org-link, and org-tag were missing from auto-dim-other-buffers-affected-faces, so they stayed lit while the rest of an unfocused window faded. I flat-dimmed them rather than giving them -dim variants. The active theme gives all eight heading levels one foreground and no height or weight, so no level-by-colour signal is lost. The fork remaps relatively, so org-link keeps its underline and the stars and org-indent keep conveying depth. That premise is theme-dependent, and the comment says so. A second test pins the keyword and priority faces to their -dim variants, so a later change can't quietly flat-dim those too.
-rw-r--r--modules/auto-dim-config.el18
-rw-r--r--tests/test-auto-dim-config.el33
2 files changed, 51 insertions, 0 deletions
diff --git a/modules/auto-dim-config.el b/modules/auto-dim-config.el
index efae5341..f10c1fd2 100644
--- a/modules/auto-dim-config.el
+++ b/modules/auto-dim-config.el
@@ -75,6 +75,24 @@ focus cue on a split-displayed dashboard, accepted as a fair trade."
(font-lock-builtin-face . (auto-dim-other-buffers . nil))
(font-lock-preprocessor-face . (auto-dim-other-buffers . nil))
(font-lock-warning-face . (auto-dim-other-buffers . nil))
+ ;; Org structure faces flat-dim like font-lock rather than getting
+ ;; -dim variants: the active theme gives org-level-1..8 one shared
+ ;; foreground and no height or weight, so there is no level-by-colour
+ ;; signal to preserve. The remap is relative, so org-link keeps its
+ ;; underline and the heading stars / org-indent keep conveying depth.
+ ;; That premise is theme-dependent -- a theme that colours heading
+ ;; levels distinctly would make the flat dim discard real signal, and
+ ;; those levels would then want -dim variants like the keywords below.
+ (org-level-1 . (auto-dim-other-buffers . nil))
+ (org-level-2 . (auto-dim-other-buffers . nil))
+ (org-level-3 . (auto-dim-other-buffers . nil))
+ (org-level-4 . (auto-dim-other-buffers . nil))
+ (org-level-5 . (auto-dim-other-buffers . nil))
+ (org-level-6 . (auto-dim-other-buffers . nil))
+ (org-level-7 . (auto-dim-other-buffers . nil))
+ (org-level-8 . (auto-dim-other-buffers . nil))
+ (org-link . (auto-dim-other-buffers . nil))
+ (org-tag . (auto-dim-other-buffers . nil))
;; Org TODO-keyword + priority faces dim to their own -dim variant
;; (a darker shade of the same colour) rather than the flat gray, so
;; a dimmed window's keywords stay recognizable. Faces are defined
diff --git a/tests/test-auto-dim-config.el b/tests/test-auto-dim-config.el
index 2686b88f..b69b0d1f 100644
--- a/tests/test-auto-dim-config.el
+++ b/tests/test-auto-dim-config.el
@@ -35,6 +35,39 @@
(when (fboundp 'auto-dim-other-buffers-mode)
(auto-dim-other-buffers-mode -1))))
+(defconst test-auto-dim--flat-dimmed-org-faces
+ (append (mapcar (lambda (n) (intern (format "org-level-%d" n)))
+ (number-sequence 1 8))
+ '(org-link org-tag))
+ "Org faces that must flat-dim to the `auto-dim-other-buffers' face.
+These carry no signal that a dedicated -dim variant would preserve: the
+theme gives `org-level-1' through `org-level-8' one shared foreground and
+no height or weight, `org-link' keeps its underline through a relative
+remap, and `org-tag' keeps its surrounding colons.")
+
+(ert-deftest test-auto-dim-config-org-structure-faces-flat-dim ()
+ "Normal: org heading, link, and tag faces remap to the flat dim face."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (dolist (face test-auto-dim--flat-dimmed-org-faces)
+ (let ((entry (assq face auto-dim-other-buffers-affected-faces)))
+ (should entry)
+ (should (eq 'auto-dim-other-buffers (car (cdr entry))))
+ (should (null (cdr (cdr entry)))))))
+
+(ert-deftest test-auto-dim-config-keyword-faces-keep-dim-variants ()
+ "Boundary: org TODO-keyword faces keep dedicated -dim variants, not flat dim.
+Keyword status is scanned across unfocused windows, so it earns a variant;
+heading colour does not. Guards the flat-dim change from over-reaching."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (dolist (pair '((org-faces-todo . org-faces-todo-dim)
+ (org-faces-doing . org-faces-doing-dim)
+ (org-faces-priority-a . org-faces-priority-a-dim)))
+ (let ((entry (assq (car pair) auto-dim-other-buffers-affected-faces)))
+ (should entry)
+ (should (eq (cdr pair) (car (cdr entry)))))))
+
(ert-deftest test-auto-dim-config-never-dim-dashboard-exempts-dashboard ()
"Normal: the *dashboard* buffer is exempt from dimming."
(skip-unless (file-directory-p test-auto-dim--fork))