branch: externals/exwm
commit 31303f47ba6f8e4023e815631cb1b778d7061186
Author: Steven Allen <[email protected]>
Commit: Steven Allen <[email protected]>

    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.
---
 exwm-xim.el | 114 +++++++++++++++++++++++++++++-------------------------------
 1 file changed, 55 insertions(+), 59 deletions(-)

diff --git a/exwm-xim.el b/exwm-xim.el
index fcc5703219..c0fdb5b880 100644
--- a/exwm-xim.el
+++ b/exwm-xim.el
@@ -170,33 +170,31 @@ DATA contains unmarshalled SelectionRequest event data.
 
 Such events would be received when clients query for LOCALES or TRANSPORT."
   (exwm--log)
-  (let ((evt (xcb:unmarshal-new 'xcb:SelectionRequest data))
-        value fake-event)
-    (with-slots (time requestor selection target property) evt
-      (setq value (cond ((= target exwm-xim--LOCALES)
-                         ;; Return supported locales.
-                         exwm-xim--locales)
-                        ((= target exwm-xim--TRANSPORT)
-                         ;; Use XIM over an X connection.
-                         "@transport=X/")))
-      (when value
-        ;; Change the property.
-        (xcb:+request exwm-xim--conn
-            (make-instance 'xcb:ChangeProperty
-                           :mode xcb:PropMode:Replace
-                           :window requestor
-                           :property property
-                           :type target
-                           :format 8
-                           :data-len (length value)
-                           :data value))
-        ;; Send a SelectionNotify event.
-        (setq fake-event (make-instance 'xcb:SelectionNotify
-                                        :time time
-                                        :requestor requestor
-                                        :selection selection
-                                        :target target
-                                        :property property))
+  (with-slots (time requestor selection target property)
+      (xcb:unmarshal-new 'xcb:SelectionRequest data)
+    (when-let* ((value (cond ((= target exwm-xim--LOCALES)
+                              ;; Return supported locales.
+                              exwm-xim--locales)
+                             ((= target exwm-xim--TRANSPORT)
+                              ;; Use XIM over an X connection.
+                              "@transport=X/"))))
+      ;; Change the property.
+      (xcb:+request exwm-xim--conn
+          (make-instance 'xcb:ChangeProperty
+                         :mode xcb:PropMode:Replace
+                         :window requestor
+                         :property property
+                         :type target
+                         :format 8
+                         :data-len (length value)
+                         :data value))
+      ;; Send a SelectionNotify event.
+      (let ((fake-event (make-instance 'xcb:SelectionNotify
+                                       :time time
+                                       :requestor requestor
+                                       :selection selection
+                                       :target target
+                                       :property property)))
         (xcb:+request exwm-xim--conn
             (make-instance 'xcb:SendEvent
                            :propagate 0
@@ -212,17 +210,17 @@ Such events would be received when clients request for 
_XIM_XCONNECT.
 A new X connection and server window would be created to communicate with
 this client."
   (exwm--log)
-  (let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
-        conn client-xwin server-xwin)
-    (with-slots (window type data) evt
-      (unless (= type exwm-xim--_XIM_XCONNECT)
-        ;; Only handle _XIM_XCONNECT.
-        (exwm--log "Ignore ClientMessage %s" type)
-        (cl-return-from exwm-xim--on-ClientMessage-0))
-      (setq client-xwin (elt (slot-value data 'data32) 0)
-            ;; Create a new X connection and a new server window.
-            conn (xcb:connect)
-            server-xwin (xcb:generate-id conn))
+  (let* ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
+         (type (slot-value evt 'type))
+         (data (slot-value evt 'data)))
+    (unless (= type exwm-xim--_XIM_XCONNECT)
+      ;; Only handle _XIM_XCONNECT.
+      (exwm--log "Ignore ClientMessage %s" type)
+      (cl-return-from exwm-xim--on-ClientMessage-0))
+    (let* ((client-xwin (elt (slot-value data 'data32) 0))
+           ;; Create a new X connection and a new server window.
+           (conn (xcb:connect))
+           (server-xwin (xcb:generate-id conn)))
       (set-process-query-on-exit-flag (slot-value conn 'process) nil)
       ;; Store this client.
       (plist-put exwm-xim--server-client-plist server-xwin
@@ -254,7 +252,7 @@ this client."
                          :override-redirect 1))
       (xcb:flush conn)
       ;; Send connection establishment ClientMessage.
-      (setf window client-xwin
+      (setf (slot-value evt 'window) client-xwin
             (slot-value data 'data32) `(,server-xwin 0 0 0 0))
       (slot-makeunbound data 'data8)
       (slot-makeunbound data 'data16)
@@ -272,16 +270,15 @@ this client."
 Such events would be received when clients request for _XIM_PROTOCOL.
 The actual XIM request is in client message data or a property."
   (exwm--log)
-  (let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
-        conn client-xwin server-xwin)
-    (with-slots (format window type data) evt
-      (unless (= type exwm-xim--_XIM_PROTOCOL)
-        (exwm--log "Ignore ClientMessage %s" type)
-        (cl-return-from exwm-xim--on-ClientMessage))
-      (setq server-xwin window
-            conn (plist-get exwm-xim--server-client-plist server-xwin)
-            client-xwin (elt conn 1)
-            conn (elt conn 0))
+  (with-slots (format window type data)
+      (xcb:unmarshal-new 'xcb:ClientMessage data)
+    (unless (= type exwm-xim--_XIM_PROTOCOL)
+      (exwm--log "Ignore ClientMessage %s" type)
+      (cl-return-from exwm-xim--on-ClientMessage))
+    (let* ((server-xwin window)
+           (client-conn (plist-get exwm-xim--server-client-plist server-xwin))
+           (client-xwin (elt client-conn 1))
+           (conn (elt client-conn 0)))
       (cond ((= format 8)
              ;; Data.
              (exwm-xim--on-request (vconcat (slot-value data 'data8))
@@ -654,20 +651,19 @@ the request data or where to fetch the data."
 Such event would be received when the client window is destroyed."
   (exwm--log)
   (unless synthetic
-    (let ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
-          conn client-xwin server-xwin)
-      (setq client-xwin (slot-value evt 'window)
-            server-xwin (plist-get exwm-xim--client-server-plist client-xwin))
-      (when server-xwin
-        (setq conn (aref (plist-get exwm-xim--server-client-plist server-xwin)
-                         0))
+    (when-let* ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
+                (client-xwin (slot-value evt 'window))
+                (server-xwin (plist-get exwm-xim--client-server-plist
+                                        client-xwin))
+                (conn (aref (plist-get exwm-xim--server-client-plist
+                                        server-xwin)
+                            0)))
         (cl-remf exwm-xim--server-client-plist server-xwin)
         (cl-remf exwm-xim--client-server-plist client-xwin)
         ;; Destroy the communication window & connection.
         (xcb:+request conn
-            (make-instance 'xcb:DestroyWindow
-                           :window server-xwin))
-        (xcb:disconnect conn)))))
+            (make-instance 'xcb:DestroyWindow :window server-xwin))
+        (xcb:disconnect conn))))
 
 (cl-defun exwm-xim--init ()
   "Initialize the XIM module."

Reply via email to