[Top][All Lists]

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

[elpa] externals/exwm 22ee3e6: Adjust default prefix keys; advice x-crea

From: Chris Feng
Subject: [elpa] externals/exwm 22ee3e6: Adjust default prefix keys; advice x-create-frame
Date: Wed, 23 Sep 2015 04:55:30 +0000

branch: externals/exwm
commit 22ee3e6c5ffdc73f231e7125f48827dc1d44237f
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Adjust default prefix keys; advice x-create-frame
    * exwm-input.el (exwm-input--on-KeyPress-line-mode, exwm-input-prefix-keys):
      Allow users to disable 'C-c' prefixed keys; Add 'C-c' to / remove 'M-!'
      from the default prefix keys.
    * exwm-workspace.el (exwm-workspace--x-create-frame, exwm-workspace--init):
      Advice `x-create-frame' to prevent it from hanging EXWM, making e.g.
      speedbar working.
    * exwm-floating.el (exwm-floating--set-floating): Remove the now unnecessary
      request that sets override-redirect on floating frames.
 exwm-floating.el  |    5 -----
 exwm-input.el     |    3 +--
 exwm-workspace.el |   14 ++++++++++++++
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/exwm-floating.el b/exwm-floating.el
index 36a658a..924f7cf 100644
--- a/exwm-floating.el
+++ b/exwm-floating.el
@@ -141,11 +141,6 @@
             (setq x (/ (- display-width width) 2)
                   y (/ (- display-height height) 2))))))
     (exwm--log "Floating geometry (corrected): %dx%d%+d%+d" width height x y)
-    ;; Set OverrideRedirect on this frame
-    (xcb:+request exwm--connection
-        (make-instance 'xcb:ChangeWindowAttributes
-                       :window outer-id :value-mask xcb:CW:OverrideRedirect
-                       :override-redirect 1))
     ;; Set event mask
     (xcb:+request exwm--connection
         (make-instance 'xcb:ChangeWindowAttributes
diff --git a/exwm-input.el b/exwm-input.el
index eb28792..9645182 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -209,7 +209,7 @@ It's updated in several occasions, and only used by 
 (defvar exwm-input--global-prefix-keys nil
   "List of prefix keys of global key bindings.")
 (defvar exwm-input-prefix-keys
-  '(?\C-x ?\C-u ?\C-h ?\M-x ?\M-` ?\M-! ?\M-& ?\M-:)
+  '(?\C-c ?\C-x ?\C-u ?\C-h ?\M-x ?\M-` ?\M-& ?\M-:)
   "List of prefix keys EXWM should forward to Emacs when in line-mode.")
 (defvar exwm-input--simulation-keys nil "Simulation keys in line-mode.")
 (defvar exwm-input--simulation-prefix-keys nil
@@ -259,7 +259,6 @@ It's updated in several occasions, and only used by 
                  (setq event (xcb:keysyms:keysym->event keysym state))
                  (or exwm-input--during-key-sequence
                      (setq minibuffer-window (active-minibuffer-window))
-                     (eq event ?\C-c)   ;mode-specific key
                      (memq event exwm-input--global-prefix-keys)
                      (memq event exwm-input-prefix-keys)
                      (memq event exwm-input--simulation-prefix-keys)))
diff --git a/exwm-workspace.el b/exwm-workspace.el
index 03972b4..566ea53 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -263,6 +263,18 @@ The optional FORCE option is for internal use only."
       (setq newname (format "%s<%d>" basename (cl-incf counter))))
     (rename-buffer (concat (and hidden " ") newname))))
+(defun exwm-workspace--x-create-frame (orig-fun params)
+  "Set override-redirect on the frame created by `x-create-frame'."
+  (let ((frame (funcall orig-fun params)))
+    (xcb:+request exwm--connection
+        (make-instance 'xcb:ChangeWindowAttributes
+                       :window (string-to-number
+                                (frame-parameter frame 'outer-window-id))
+                       :value-mask xcb:CW:OverrideRedirect
+                       :override-redirect 1))
+    (xcb:flush exwm--connection)
+    frame))
 (defun exwm-workspace--init ()
   "Initialize workspace module."
   (cl-assert (and (< 0 exwm-workspace-number) (>= 10 exwm-workspace-number)))
@@ -306,6 +318,8 @@ The optional FORCE option is for internal use only."
                          :window window-id :value-mask xcb:CW:EventMask
                          :event-mask xcb:EventMask:SubstructureRedirect))))
   (xcb:flush exwm--connection)
+  ;; We have to advice `x-create-frame' or every call to it would hang EXWM
+  (advice-add 'x-create-frame :around #'exwm-workspace--x-create-frame)
   ;; We have to delay making the frame visible until the
   ;; override-redirect flag has been set.
   (select-frame-set-input-focus (car exwm-workspace--list))

reply via email to

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