emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 9c85f17 1/3: Skip global keys unavailable in X ser


From: Chris Feng
Subject: [elpa] externals/exwm 9c85f17 1/3: Skip global keys unavailable in X server
Date: Sun, 22 Sep 2019 10:16:27 -0400 (EDT)

branch: externals/exwm
commit 9c85f172e5697f85bdea67ef8b23819448abd31a
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Skip global keys unavailable in X server
    
    * exwm-input.el (exwm-input--grab-global-prefix-keys): Some global
    keys might not be available in X server (perhaps due to
    misconfiguration).
---
 exwm-input.el | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/exwm-input.el b/exwm-input.el
index 52370bf..c5eedc9 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -488,24 +488,27 @@ ARGS are additional arguments to CALLBACK."
                             :keyboard-mode xcb:GrabMode:Async))
         keysyms keycode alt-modifier)
     (dolist (k exwm-input--global-prefix-keys)
-      (setq keysyms (xcb:keysyms:event->keysyms exwm--connection k)
-            keycode (xcb:keysyms:keysym->keycode exwm--connection
-                                                 (caar keysyms)))
-      (exwm--log "Grabbing key=%s (keysyms=%s keycode=%s)"
-                 (single-key-description k) keysyms keycode)
-      (dolist (keysym keysyms)
-        (setf (slot-value req 'modifiers) (cdr keysym)
-              (slot-value req 'key) keycode)
-        ;; Also grab this key with num-lock mask set.
-        (when (and (/= 0 xcb:keysyms:num-lock-mask)
-                   (= 0 (logand (cdr keysym) xcb:keysyms:num-lock-mask)))
-          (setf alt-modifier (logior (cdr keysym) xcb:keysyms:num-lock-mask)))
-        (dolist (xwin xwins)
-          (setf (slot-value req 'grab-window) xwin)
-          (xcb:+request exwm--connection req)
-          (when alt-modifier
-            (setf (slot-value req 'modifiers) alt-modifier)
-            (xcb:+request exwm--connection req)))))
+      (setq keysyms (xcb:keysyms:event->keysyms exwm--connection k))
+      (if (not keysyms)
+          (warn "Key unavailable: %s" (key-description (vector k)))
+        (setq keycode (xcb:keysyms:keysym->keycode exwm--connection
+                                                   (caar keysyms)))
+        (exwm--log "Grabbing key=%s (keysyms=%s keycode=%s)"
+                   (single-key-description k) keysyms keycode)
+        (dolist (keysym keysyms)
+          (setf (slot-value req 'modifiers) (cdr keysym)
+                (slot-value req 'key) keycode)
+          ;; Also grab this key with num-lock mask set.
+          (when (and (/= 0 xcb:keysyms:num-lock-mask)
+                     (= 0 (logand (cdr keysym) xcb:keysyms:num-lock-mask)))
+            (setf alt-modifier (logior (cdr keysym)
+                                       xcb:keysyms:num-lock-mask)))
+          (dolist (xwin xwins)
+            (setf (slot-value req 'grab-window) xwin)
+            (xcb:+request exwm--connection req)
+            (when alt-modifier
+              (setf (slot-value req 'modifiers) alt-modifier)
+              (xcb:+request exwm--connection req))))))
     (xcb:flush exwm--connection)))
 
 (defun exwm-input--set-key (key command)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]