diff --git a/eaf.el b/eaf.el index 2831fd3..3eb30b0 100644 --- a/eaf.el +++ b/eaf.el @@ -2077,6 +2077,42 @@ Make sure that your smartphone is connected to the same WiFi network as this com (other-window -1) (apply orig-fun direction line args))) + +;;;;;;;;;;;;;;;;;;;; evil ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defvar eaf-printable-character + (mapcar #'char-to-string (delq ?i (number-sequence ?: ?~))) + "") + +(defvar eaf-last-focus-buffer nil "") + +(defun eaf-generate-normal-state-key-func (key) + (lambda () (interactive) + (funcall (or (lookup-key (current-local-map) key) + (lookup-key eaf-mode-map* key) + 'eaf-send-key)))) + +(defun eaf-buffer-focus-handler () + (when (not (buffer-live-p eaf-last-focus-buffer)) + (setq eaf-last-focus-buffer nil)) + (when (and (not (memq major-mode '(minibuffer-inactive-mode))) + (eq (window-buffer (selected-window)) + (current-buffer)) + (not (eq eaf-last-focus-buffer (current-buffer)))) + (setq eaf-last-focus-buffer (current-buffer)) + (when (derived-mode-p 'eaf-mode) (evil-emacs-state)))) + +(defun eaf-enable-evil-intergration () + (interactive) + (when (featurep 'evil) + ;; make sure you can use h,j,k,l and other often used key in normal sate + (dolist (key (append eaf-printable-character + '("RET" "DEL" "TAB" "SPC" "" "" "" "" "" "" "" "" "" "" "" ""))) + (evil-define-key* 'normal eaf-mode-map* (kbd key) (eaf-generate-normal-state-key-func (kbd key)))) + (add-to-list 'evil-insert-state-modes 'eaf-edit-mode) + (evil-define-key* 'normal eaf-mode-map* (kbd "i") #'evil-emacs-state) + (evil-define-key* 'emacs eaf-mode-map* (kbd "") #'evil-escape) + (add-hook 'buffer-list-update-hook #'eaf-buffer-focus-handler))) + (provide 'eaf) ;;; eaf.el ends here