about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Feng <chris.w.feng@gmail.com>2018-03-04T04·21+0800
committerChris Feng <chris.w.feng@gmail.com>2018-03-04T04·21+0800
commit277377c718429555f75a88a85f336d80f3716dce (patch)
tree2f7a83c315f405bf87bf4b0d32dc974344fdcd4a
parent7013b0122a79df24b93e1db44e4bebff8fe9acd4 (diff)
Fix local simulation keys
* exwm-input.el (exwm-input--set-simulation-keys): Try the local
binding first do not clear the hash table (rely on GC).
-rw-r--r--exwm-input.el21
1 files changed, 11 insertions, 10 deletions
diff --git a/exwm-input.el b/exwm-input.el
index e051603bad1f..379442600fd2 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -762,16 +762,17 @@ multiple keys."
 (defun exwm-input--set-simulation-keys (simulation-keys &optional no-refresh)
   "Set simulation keys."
   (unless no-refresh
-    ;; Clear keymaps and the hash table.
-    (when (hash-table-p exwm-input--simulation-keys)
-      (maphash (lambda (key _value)
-                 (when (sequencep key)
-                   (if exwm-input--local-simulation-keys
-                       (local-unset-key key)
-                     (define-key exwm-mode-map key nil))))
-               exwm-input--simulation-keys)
-      (clrhash exwm-input--simulation-keys))
-    ;; Update the hash table.
+    ;; Unbind simulation keys.
+    (let ((hash (buffer-local-value 'exwm-input--simulation-keys
+                                    (current-buffer))))
+      (when (hash-table-p hash)
+        (maphash (lambda (key _value)
+                   (when (sequencep key)
+                     (if exwm-input--local-simulation-keys
+                         (local-unset-key key)
+                       (define-key exwm-mode-map key nil))))
+                 hash)))
+    ;; Abandon the old hash table.
     (setq exwm-input--simulation-keys (make-hash-table :test #'equal)))
   (dolist (i simulation-keys)
     (let ((original (vconcat (car i)))