[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)