Skip to content

Commit f8ca057

Browse files
committed
Use global minor modes for EXWM features
1 parent 3e6bfe3 commit f8ca057

6 files changed

+85
-29
lines changed

exwm-background.el

+14-7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@
3434

3535
(require 'exwm-core)
3636

37+
;;;###autoload
38+
(define-minor-mode exwm-background-mode
39+
"Toggle EXWM background support."
40+
:global t
41+
:group 'exwm
42+
(exwm--global-minor-mode-body background))
43+
44+
;;;###autoload
45+
(defun exwm-background-enable ()
46+
"Enable EXWM background support."
47+
(exwm-background-mode 1))
48+
(make-obsolete #'exwm-background-enable "Use `exwm-background-mode' instead." "0.40")
49+
3750
(defcustom exwm-background-color nil
3851
"Background color for Xorg."
3952
:type '(choice
@@ -43,7 +56,7 @@
4356
:initialize #'custom-initialize-default
4457
:set (lambda (symbol value)
4558
(set-default-toplevel-value symbol value)
46-
(exwm-background--update)))
59+
(when exwm-background-mode (exwm-background--update))))
4760

4861
(defconst exwm-background--properties '("_XROOTPMAP_ID" "_XSETROOT_ID" "ESETROOT_PMAP_ID")
4962
"The background properties to set.
@@ -188,12 +201,6 @@ may kill this connection when they replace it.")
188201
exwm-background--connection nil
189202
exwm-background--atoms nil))
190203

191-
(defun exwm-background-enable ()
192-
"Enable background support for EXWM."
193-
(exwm--log)
194-
(add-hook 'exwm-init-hook #'exwm-background--init)
195-
(add-hook 'exwm-exit-hook #'exwm-background--exit))
196-
197204
(provide 'exwm-background)
198205

199206
;;; exwm-background.el ends here

exwm-core.el

+20
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,26 @@ One of `line-mode' or `char-mode'.")
408408
right-fringe-width 0
409409
vertical-scroll-bar nil))
410410

411+
(defmacro exwm--global-minor-mode-body (name &optional init exit)
412+
"Define EXWM namespaced global minor mode with NAME.
413+
EXWM's init-hook and exit-hook are modified to call INIT and EXIT functions.
414+
If an X connection exists, the mode is immediately enabled or disabled."
415+
(declare (indent 1) (debug t))
416+
(let* ((mode (intern (format "exwm-%s-mode" name)))
417+
(init (or init (intern (format "exwm-%s--init" name))))
418+
(exit (or exit (intern (format "exwm-%s--exit" name)))))
419+
`(progn
420+
(exwm--log)
421+
(cond
422+
(,mode
423+
(add-hook 'exwm-init-hook #',init)
424+
(add-hook 'exwm-exit-hook #',exit)
425+
(when exwm--connection (,init)))
426+
(t
427+
(remove-hook 'exwm-init-hook #',init)
428+
(remove-hook 'exwm-exit-hook #',exit)
429+
(when exwm--connection (,exit)))))))
430+
411431

412432

413433
(provide 'exwm-core)

exwm-randr.el

+11-4
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,18 @@ Refresh when any RandR 1.5 monitor changes."
356356
(exwm--log)
357357
(remove-hook 'exwm-workspace-list-change-hook #'exwm-randr-refresh))
358358

359+
;;;###autoload
360+
(define-minor-mode exwm-randr-mode
361+
"Toggle EXWM randr support."
362+
:global t
363+
:group 'exwm
364+
(exwm--global-minor-mode-body randr))
365+
366+
;;;###autoload
359367
(defun exwm-randr-enable ()
360-
"Enable RandR support for EXWM."
361-
(exwm--log)
362-
(add-hook 'exwm-init-hook #'exwm-randr--init)
363-
(add-hook 'exwm-exit-hook #'exwm-randr--exit))
368+
"Enable EXWM RandR support."
369+
(exwm-randr-mode 1))
370+
(make-obsolete #'exwm-randr-enable "Use `exwm-randr-mode' instead." "0.40")
364371

365372

366373

exwm-systemtray.el

+15-7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,19 @@
5050
"System tray."
5151
:group 'exwm)
5252

53+
;;;###autoload
54+
(define-minor-mode exwm-systemtray-mode
55+
"Toggle EXWM systemtray support."
56+
:global t
57+
:group 'exwm
58+
(exwm--global-minor-mode-body systemtray))
59+
60+
;;;###autoload
61+
(defun exwm-systemtray-enable ()
62+
"Enable EXWM systemtray support."
63+
(exwm-systemtray-mode 1))
64+
(make-obsolete #'exwm-systemtray-enable "Use `exwm-systemtray-mode' instead." "0.40")
65+
5366
(defcustom exwm-systemtray-height nil
5467
"System tray height.
5568
@@ -87,7 +100,8 @@ TrueColor-24\" can be used to force Emacs to use 24-bit depth."
87100
using 32-bit depth. Using `workspace-background' instead.")
88101
(setq value 'workspace-background))
89102
(set-default symbol value)
90-
(when (and exwm-systemtray--connection
103+
(when (and exwm-systemtray-mode
104+
exwm-systemtray--connection
91105
exwm-systemtray--embedder-window)
92106
;; Change the background color for embedder.
93107
(exwm-systemtray--set-background-color)
@@ -679,12 +693,6 @@ Argument DATA contains the raw event data."
679693
(when (boundp 'exwm-randr-refresh-hook)
680694
(remove-hook 'exwm-randr-refresh-hook #'exwm-systemtray--refresh-all))))
681695

682-
(defun exwm-systemtray-enable ()
683-
"Enable system tray support for EXWM."
684-
(exwm--log)
685-
(add-hook 'exwm-init-hook #'exwm-systemtray--init)
686-
(add-hook 'exwm-exit-hook #'exwm-systemtray--exit))
687-
688696

689697

690698
(provide 'exwm-systemtray)

exwm-xim.el

+11-4
Original file line numberDiff line numberDiff line change
@@ -797,11 +797,18 @@ Such event would be received when the client window is destroyed."
797797
(xcb:disconnect exwm-xim--conn)
798798
(setq exwm-xim--conn nil))
799799

800+
;;;###autoload
801+
(define-minor-mode exwm-xim-mode
802+
"Toggle EXWM XIM support."
803+
:global t
804+
:group 'exwm
805+
(exwm--global-minor-mode-body xim))
806+
807+
;;;###autoload
800808
(defun exwm-xim-enable ()
801-
"Enable XIM support for EXWM."
802-
(exwm--log)
803-
(add-hook 'exwm-init-hook #'exwm-xim--init)
804-
(add-hook 'exwm-exit-hook #'exwm-xim--exit))
809+
"Enable EXWM XIM support."
810+
(exwm-xim-mode 1))
811+
(make-obsolete #'exwm-xim-enable "Use `exwm-xim-mode' instead." "0.40")
805812

806813

807814

exwm-xsettings.el

+14-7
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@
5858
(defvar exwm-xsettings--selection-owner-window nil)
5959
(defvar exwm-xsettings--serial 0)
6060

61+
;;;###autoload
62+
(define-minor-mode exwm-xsettings-mode
63+
"Toggle EXWM xsettings support."
64+
:global t
65+
:group 'exwm
66+
(exwm--global-minor-mode-body xsettings))
67+
68+
;;;###autoload
69+
(defun exwm-xsettings-enable ()
70+
"Enable EXWM xsettings support."
71+
(exwm-xsettings-mode 1))
72+
(make-obsolete #'exwm-xsettings-enable "Use `exwm-xsettings-mode' instead." "0.40")
73+
6174
(defun exwm-xsettings--rgba-match (_widget value)
6275
"Return t if VALUE is a valid RGBA color."
6376
(and (numberp value) (<= 0 value 1)))
@@ -67,7 +80,7 @@
6780
6881
SYMBOL is the setting being updated and VALUE is the new value."
6982
(set-default-toplevel-value symbol value)
70-
(exwm-xsettings--update-settings))
83+
(when exwm-xsettings-mode (exwm-xsettings--update-settings)))
7184

7285
(defgroup exwm-xsettings nil
7386
"XSETTINGS."
@@ -325,12 +338,6 @@ SERIAL is a sequence number."
325338
exwm-xsettings--XSETTINGS_S0-atom nil
326339
exwm-xsettings--selection-owner-window nil)))
327340

328-
(defun exwm-xsettings-enable ()
329-
"Enable xsettings support for EXWM."
330-
(exwm--log)
331-
(add-hook 'exwm-init-hook #'exwm-xsettings--init)
332-
(add-hook 'exwm-exit-hook #'exwm-xsettings--exit))
333-
334341
(provide 'exwm-xsettings)
335342

336343
;;; exwm-xsettings.el ends here

0 commit comments

Comments
 (0)