[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm f96f565 3/3: Add support for keyboard macro
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm f96f565 3/3: Add support for keyboard macro |
Date: |
Thu, 22 Sep 2016 11:14:08 +0000 (UTC) |
branch: externals/exwm
commit f96f565d548521a87e0f3a23bfab7f5b836e4640
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Add support for keyboard macro
* exwm-core.el (exwm--kmacro-map): New keymap used when executing
keyboard macros.
(exwm-mode): Use `exwm--kmacro-map' to override the default keymap.
* exwm-input.el (exwm-input--on-KeyPress-line-mode): Send extra key
events when defining keyboard macros.
---
exwm-core.el | 31 +++++++++++++++++++++++++++++++
exwm-input.el | 6 +++++-
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/exwm-core.el b/exwm-core.el
index e65ad51..8f5299f 100644
--- a/exwm-core.el
+++ b/exwm-core.el
@@ -26,6 +26,8 @@
;;; Code:
+(require 'kmacro)
+
(require 'xcb)
(require 'xcb-icccm)
(require 'xcb-ewmh)
@@ -78,6 +80,12 @@
(logior xcb:EventMask:StructureNotify xcb:EventMask:PropertyChange))
"Event mask set on all managed windows.")
+(defvar exwm-input--during-key-sequence)
+(defvar exwm-input--global-prefix-keys)
+(defvar exwm-input-prefix-keys)
+(defvar exwm-input--simulation-prefix-keys)
+
+(declare-function exwm-input--fake-key "exwm-input.el" (event))
(declare-function exwm-input--on-KeyPress-line-mode "exwm-input.el"
(key-press raw-data))
@@ -140,6 +148,26 @@
map)
"Keymap for `exwm-mode'.")
+(defvar exwm--kmacro-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [t]
+ (lambda ()
+ (interactive)
+ (cond
+ ((or exwm-input--during-key-sequence
+ ;; Do not test `exwm-input--during-command'.
+ (active-minibuffer-window)
+ (memq last-input-event exwm-input--global-prefix-keys)
+ (memq last-input-event exwm-input-prefix-keys)
+ (memq last-input-event exwm-input--simulation-prefix-keys))
+ (set-transient-map (make-composed-keymap (list exwm-mode-map
+ global-map)))
+ (push last-input-event unread-command-events))
+ (t
+ (exwm-input--fake-key last-input-event)))))
+ map)
+ "Keymap used when executing keyboard macros.")
+
;; This menu mainly acts as an reminder for users. Thus it should be as
;; detailed as possible, even some entries do not make much sense here.
;; Also, inactive entries should be disabled rather than hidden.
@@ -226,6 +254,9 @@
;; Kill buffer -> close window
(add-hook 'kill-buffer-query-functions
#'exwm-manage--kill-buffer-query-function nil t)
+ ;; Redirect events when executing keyboard macros.
+ (push `(executing-kbd-macro . ,exwm--kmacro-map)
+ minor-mode-overriding-map-alist)
(setq buffer-read-only t
left-margin-width nil
right-margin-width nil
diff --git a/exwm-input.el b/exwm-input.el
index dd65b6e..8101cbd 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -454,7 +454,11 @@ This value should always be overwritten.")
:propagate 0
:destination (slot-value key-press 'event)
:event-mask xcb:EventMask:NoEvent
- :event raw-data))))
+ :event raw-data)))
+ ;; Make Emacs aware of this event when defining keyboard macros.
+ (when (and defining-kbd-macro event)
+ (set-transient-map '(keymap (t . (lambda () (interactive)))))
+ (exwm-input--unread-event event)))
(xcb:+request exwm--connection
(make-instance 'xcb:AllowEvents
:mode mode