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. --- tests/test-term-tmux-history.el | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tests') diff --git a/tests/test-term-tmux-history.el b/tests/test-term-tmux-history.el index c7154e5d2..1dbf6b0bf 100644 --- a/tests/test-term-tmux-history.el +++ b/tests/test-term-tmux-history.el @@ -288,5 +288,13 @@ returns to semi-char from EAT's emacs/char mode -- one exit key for both." (cj/term-send-escape) (should (equal sent '("\e")))))) +(ert-deftest test-term-word-motion-arrows-forwarded-not-window-arrows () + "Normal: C-/M-left/right forward to the terminal (word motion in the program's +input) instead of moving Emacs point; windmove's S-arrows still reach Emacs." + (dolist (key '("C-" "C-" "M-" "M-")) + (should (eq (keymap-lookup eat-semi-char-mode-map key) #'eat-self-input))) + (dolist (key '("S-" "S-")) + (should-not (eq (keymap-lookup eat-semi-char-mode-map key) #'eat-self-input)))) + (provide 'test-term-tmux-history) ;;; test-term-tmux-history.el ends here -- cgit v1.2.3