* .emacs.d/init.el (b/invert-default-face): Improve.
authorAmin Bandali <bandali@gnu.org>
Sat, 24 Dec 2022 21:27:43 +0000 (16:27 -0500)
committerAmin Bandali <bandali@gnu.org>
Sat, 24 Dec 2022 21:27:43 +0000 (16:27 -0500)
Take a prefix argument that when set, will have the function invert
the faces across all frames rather than just (selected-frame).

Also, if we're running EXWM refresh the system tray background colour.

.emacs.d/init.el

index 8d05845..b4a16cc 100644 (file)
@@ -418,12 +418,19 @@ Make N (default: 1) copies of the current line or region."
         (dotimes (_ (abs n1))
           (insert text))))))
 
         (dotimes (_ (abs n1))
           (insert text))))))
 
-(defun b/invert-default-face ()
-  "Invert the `default' face (swap its background and foreground).
-Effectively a very simple light/dark theme toggle switch."
-  (interactive)
-  (invert-face 'default (selected-frame))
-  (invert-face 'mode-line (selected-frame)))
+(defun b/invert-default-face (arg)
+  "Invert the `default' and `mode-line' faces for the current frame.
+Swap the background and foreground for the two `default' and
+`mode-line' faces, effectively acting like a simple light/dark
+theme toggle.  If prefix argument ARG is given, invert the faces
+for all frames."
+  (interactive "P")
+  (let ((frame (unless arg
+                 (selected-frame))))
+    (invert-face 'default frame)
+    (invert-face 'mode-line frame))
+  (when (fboundp #'exwm-systemtray--refresh-background-color)
+    (exwm-systemtray--refresh-background-color 'remap)))
 
 (defun b/export-frame ()
   (interactive)
 
 (defun b/export-frame ()
   (interactive)