Skip to content

Commit 1da38fe

Browse files
committed
exwm-xim: Prefer let bindings over setq
This makes it easier to trace where variables are used/set. * exwm-xim.el (exwm-xim--on-SelectionRequest): (exwm-xim--on-ClientMessage-0): (exwm-xim--on-ClientMessage): (exwm-xim--make-request): Prefer let over setq.
1 parent d27aa53 commit 1da38fe

File tree

1 file changed

+55
-59
lines changed

1 file changed

+55
-59
lines changed

exwm-xim.el

Lines changed: 55 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -170,33 +170,31 @@ DATA contains unmarshalled SelectionRequest event data.
170170
171171
Such events would be received when clients query for LOCALES or TRANSPORT."
172172
(exwm--log)
173-
(let ((evt (xcb:unmarshal-new 'xcb:SelectionRequest data))
174-
value fake-event)
175-
(with-slots (time requestor selection target property) evt
176-
(setq value (cond ((= target exwm-xim--LOCALES)
177-
;; Return supported locales.
178-
exwm-xim--locales)
179-
((= target exwm-xim--TRANSPORT)
180-
;; Use XIM over an X connection.
181-
"@transport=X/")))
182-
(when value
183-
;; Change the property.
184-
(xcb:+request exwm-xim--conn
185-
(make-instance 'xcb:ChangeProperty
186-
:mode xcb:PropMode:Replace
187-
:window requestor
188-
:property property
189-
:type target
190-
:format 8
191-
:data-len (length value)
192-
:data value))
193-
;; Send a SelectionNotify event.
194-
(setq fake-event (make-instance 'xcb:SelectionNotify
195-
:time time
196-
:requestor requestor
197-
:selection selection
198-
:target target
199-
:property property))
173+
(with-slots (time requestor selection target property)
174+
(xcb:unmarshal-new 'xcb:SelectionRequest data)
175+
(when-let* ((value (cond ((= target exwm-xim--LOCALES)
176+
;; Return supported locales.
177+
exwm-xim--locales)
178+
((= target exwm-xim--TRANSPORT)
179+
;; Use XIM over an X connection.
180+
"@transport=X/"))))
181+
;; Change the property.
182+
(xcb:+request exwm-xim--conn
183+
(make-instance 'xcb:ChangeProperty
184+
:mode xcb:PropMode:Replace
185+
:window requestor
186+
:property property
187+
:type target
188+
:format 8
189+
:data-len (length value)
190+
:data value))
191+
;; Send a SelectionNotify event.
192+
(let ((fake-event (make-instance 'xcb:SelectionNotify
193+
:time time
194+
:requestor requestor
195+
:selection selection
196+
:target target
197+
:property property)))
200198
(xcb:+request exwm-xim--conn
201199
(make-instance 'xcb:SendEvent
202200
:propagate 0
@@ -212,17 +210,17 @@ Such events would be received when clients request for _XIM_XCONNECT.
212210
A new X connection and server window would be created to communicate with
213211
this client."
214212
(exwm--log)
215-
(let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
216-
conn client-xwin server-xwin)
217-
(with-slots (window type data) evt
218-
(unless (= type exwm-xim--_XIM_XCONNECT)
219-
;; Only handle _XIM_XCONNECT.
220-
(exwm--log "Ignore ClientMessage %s" type)
221-
(cl-return-from exwm-xim--on-ClientMessage-0))
222-
(setq client-xwin (elt (slot-value data 'data32) 0)
223-
;; Create a new X connection and a new server window.
224-
conn (xcb:connect)
225-
server-xwin (xcb:generate-id conn))
213+
(let* ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
214+
(type (slot-value evt 'type))
215+
(data (slot-value evt 'data)))
216+
(unless (= type exwm-xim--_XIM_XCONNECT)
217+
;; Only handle _XIM_XCONNECT.
218+
(exwm--log "Ignore ClientMessage %s" type)
219+
(cl-return-from exwm-xim--on-ClientMessage-0))
220+
(let* ((client-xwin (elt (slot-value data 'data32) 0))
221+
;; Create a new X connection and a new server window.
222+
(conn (xcb:connect))
223+
(server-xwin (xcb:generate-id conn)))
226224
(set-process-query-on-exit-flag (slot-value conn 'process) nil)
227225
;; Store this client.
228226
(plist-put exwm-xim--server-client-plist server-xwin
@@ -254,7 +252,7 @@ this client."
254252
:override-redirect 1))
255253
(xcb:flush conn)
256254
;; Send connection establishment ClientMessage.
257-
(setf window client-xwin
255+
(setf (slot-value evt 'window) client-xwin
258256
(slot-value data 'data32) `(,server-xwin 0 0 0 0))
259257
(slot-makeunbound data 'data8)
260258
(slot-makeunbound data 'data16)
@@ -272,16 +270,15 @@ this client."
272270
Such events would be received when clients request for _XIM_PROTOCOL.
273271
The actual XIM request is in client message data or a property."
274272
(exwm--log)
275-
(let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
276-
conn client-xwin server-xwin)
277-
(with-slots (format window type data) evt
278-
(unless (= type exwm-xim--_XIM_PROTOCOL)
279-
(exwm--log "Ignore ClientMessage %s" type)
280-
(cl-return-from exwm-xim--on-ClientMessage))
281-
(setq server-xwin window
282-
conn (plist-get exwm-xim--server-client-plist server-xwin)
283-
client-xwin (elt conn 1)
284-
conn (elt conn 0))
273+
(with-slots (format window type data)
274+
(xcb:unmarshal-new 'xcb:ClientMessage data)
275+
(unless (= type exwm-xim--_XIM_PROTOCOL)
276+
(exwm--log "Ignore ClientMessage %s" type)
277+
(cl-return-from exwm-xim--on-ClientMessage))
278+
(let* ((server-xwin window)
279+
(client-conn (plist-get exwm-xim--server-client-plist server-xwin))
280+
(client-xwin (elt client-conn 1))
281+
(conn (elt client-conn 0)))
285282
(cond ((= format 8)
286283
;; Data.
287284
(exwm-xim--on-request (vconcat (slot-value data 'data8))
@@ -654,20 +651,19 @@ the request data or where to fetch the data."
654651
Such event would be received when the client window is destroyed."
655652
(exwm--log)
656653
(unless synthetic
657-
(let ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
658-
conn client-xwin server-xwin)
659-
(setq client-xwin (slot-value evt 'window)
660-
server-xwin (plist-get exwm-xim--client-server-plist client-xwin))
661-
(when server-xwin
662-
(setq conn (aref (plist-get exwm-xim--server-client-plist server-xwin)
663-
0))
654+
(when-let* ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
655+
(client-xwin (slot-value evt 'window))
656+
(server-xwin (plist-get exwm-xim--client-server-plist
657+
client-xwin))
658+
(conn (aref (plist-get exwm-xim--server-client-plist
659+
server-xwin)
660+
0)))
664661
(cl-remf exwm-xim--server-client-plist server-xwin)
665662
(cl-remf exwm-xim--client-server-plist client-xwin)
666663
;; Destroy the communication window & connection.
667664
(xcb:+request conn
668-
(make-instance 'xcb:DestroyWindow
669-
:window server-xwin))
670-
(xcb:disconnect conn)))))
665+
(make-instance 'xcb:DestroyWindow :window server-xwin))
666+
(xcb:disconnect conn))))
671667

672668
(cl-defun exwm-xim--init ()
673669
"Initialize the XIM module."

0 commit comments

Comments
 (0)