diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2018-03-04T04·21+0800 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2018-03-04T04·21+0800 |
commit | 277377c718429555f75a88a85f336d80f3716dce (patch) | |
tree | 2f7a83c315f405bf87bf4b0d32dc974344fdcd4a | |
parent | 7013b0122a79df24b93e1db44e4bebff8fe9acd4 (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.el | 21 |
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))) |