From 1e4ddabe69741b62d2ce1cfd84671093c6978d2d Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 26 Jun 2026 09:31:15 -0400 Subject: fix(eat): forward word-motion arrows to the terminal in agent buffers C-/M-left/right were in EAT's default eat-semi-char-non-bound-keys, so they fell through to Emacs and ran left-word/right-word, moving point in the EAT buffer instead of being sent to the program. The terminal's own cursor never moved, so the next keystroke snapped point back to the real cursor -- the "cursor jumps back" symptom when editing claude's input. Bind them to eat-self-input so they forward as word motion, the way ghostel did. Window arrows (S-, C-M-) still reach Emacs for windmove and buffer-move. --- modules/eat-config.el | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'modules') diff --git a/modules/eat-config.el b/modules/eat-config.el index de919a00a..425bbb5ed 100644 --- a/modules/eat-config.el +++ b/modules/eat-config.el @@ -431,13 +431,21 @@ pty; without tmux, moves point up in EAT's emacs-mode buffer." (defvar eat-mode-map) (declare-function eat-semi-char-mode "eat") +(declare-function eat-self-input "eat") (with-eval-after-load 'eat (keymap-set eat-semi-char-mode-map "C-" #'cj/term-copy-mode-up) ;; Escape forwards ESC to the pty, so it cancels tmux copy-mode (tmux binds ;; Escape to cancel) and works in TUIs; in EAT's own emacs/char mode it returns ;; to semi-char. One key gets out of either copy view. (keymap-set eat-semi-char-mode-map "" #'cj/term-send-escape) - (keymap-set eat-mode-map "" #'eat-semi-char-mode)) + (keymap-set eat-mode-map "" #'eat-semi-char-mode) + ;; Word-motion arrows edit the terminal program's input (claude, readline), so + ;; forward them to the pty. EAT's default leaves them in the non-bound-keys + ;; list, which moved Emacs point instead and desynced it from the real cursor + ;; (point jumped back on the next keystroke). Window arrows (S-, C-M-) keep + ;; reaching Emacs for windmove / buffer-move. + (dolist (key '("C-" "C-" "M-" "M-")) + (keymap-set eat-semi-char-mode-map key #'eat-self-input))) (provide 'eat-config) ;;; eat-config.el ends here -- cgit v1.2.3