Refactory eaf-monitor-key-event.

master
Andy Stewart 6 years ago
parent c48cda5bf9
commit 2ef8308241
  1. 92
      eaf.el

@ -509,57 +509,47 @@ Please ONLY use `eaf-bind-key' to edit EAF keybindings!"
(defun eaf-monitor-key-event ()
"Monitor key events during EAF process."
(unless
(ignore-errors
(with-current-buffer (buffer-name)
(when (eq major-mode 'eaf-mode)
(let* ((event last-command-event)
(key (if event
(make-vector 1 event)
(where-is-internal last-command)))
(key-command (symbol-name (key-binding key)))
(key-desc (key-description key)))
;; Uncomment for debug.
;; (message (format "!!!!! %s %s %s %s %s" event key key-command key-desc buffer-app-name))
(cond
;; Fix #51 , don't handle F11 to make emacs toggle frame fullscreen status successfully.
((equal key-desc "<f11>")
t)
((or (equal key-command "self-insert-command") ; Just send event when user insert single character.
(equal key-command "completion-select-if-within-overlay")) ; Don't send event 'M' if user press Ctrl + M.
(eaf-call "send_key" buffer-id key-desc))
((eaf-identify-key-in-app key-command buffer-app-name)
(cond ((equal buffer-app-name "browser")
(let ((function-name-value (cdr (assoc key-desc eaf-browser-keybinding))))
(if function-name-value
(eaf-call "execute_function" buffer-id function-name-value)
(let ((key-alias-value (cdr (assoc key-desc eaf-browser-keybinding))))
(if key-alias-value
(eaf-call "send_key" buffer-id key-alias-value))))))
((equal buffer-app-name "terminal")
(let ((function-name-value (cdr (assoc key-desc eaf-browser-keybinding))))
(when function-name-value
(eaf-call "execute_function" buffer-id function-name-value))))
((assoc buffer-app-name eaf-app-binding-alist)
(eaf-handle-app-key buffer-id key-desc
(eaf-get-app-bindings buffer-app-name)))
(t
(eaf-call "send_key" buffer-id key-desc))))
((or
(equal key-command "nil")
(member key-desc eaf-single-key-list))
(eaf-call "send_key" buffer-id key-desc))
(t
(unless (or
(equal key-command "keyboard-quit")
(equal key-command "kill-this-buffer")
(equal key-command "eaf-open"))
(call-interactively (key-binding key))))))
;; Set `last-command-event' with nil, emacs won't notify me buffer is ready-only,
;; because i insert nothing in buffer.
(setq last-command-event nil))))))
(ignore-errors
(let* ((event last-command-event)
(key (if event
(make-vector 1 event)
(where-is-internal last-command)))
(key-command (symbol-name (key-binding key)))
(key-desc (key-description key)))
;; Uncomment for debug.
;; (message (format "!!!!! %s %s %s %s %s" event key key-command key-desc buffer-app-name))
(cond
;; Fix #51 , don't handle F11 to make emacs toggle frame fullscreen status successfully.
((equal key-desc "<f11>")
t)
;; Send key when key-command is char type event.
((or (equal key-command "self-insert-command") ; Just send event when user insert single character.
(equal key-command "completion-select-if-within-overlay")) ; Don't send event 'M' if user press Ctrl + M.
(eaf-call "send_key" buffer-id key-desc))
;; Execute function or send key with app keybinding.
((eaf-identify-key-in-app key-command buffer-app-name)
(cond
((assoc buffer-app-name eaf-app-binding-alist)
(eaf-handle-app-key buffer-id key-desc
(eaf-get-app-bindings buffer-app-name)))
(t
(eaf-call "send_key" buffer-id key-desc))))
;; Send key if key-command is nil or key is single char key.
((or
(equal key-command "nil")
(member key-desc eaf-single-key-list))
(eaf-call "send_key" buffer-id key-desc))
(t
(unless (or
(equal key-command "keyboard-quit")
(equal key-command "kill-this-buffer")
(equal key-command "eaf-open"))
(call-interactively (key-binding key))))))
;; Set `last-command-event' with nil, emacs won't notify me buffer is ready-only,
;; because i insert nothing in buffer.
(setq last-command-event nil)))
(defun eaf-handle-app-key (buffer-id key-desc keybinding)
"Call function on the Python side if matched key in the keybinding.

Loading…
Cancel
Save