diff --git a/eaf.el b/eaf.el index 49776e6..8188e23 100644 --- a/eaf.el +++ b/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 "") - 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 "") + 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.