aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-05 05:43:43 -0500
committerCraig Jennings <c@cjennings.net>2026-06-05 05:43:43 -0500
commit854aa53a96476ccaae0c93bd9af0493ef8431e4b (patch)
treea102ae33bbe0341819df900228460263ee83b6c2 /tests
parentebdf9e466b0e1f86e9b7d76650ac32408273e7a7 (diff)
downloaddotemacs-854aa53a96476ccaae0c93bd9af0493ef8431e4b.tar.gz
dotemacs-854aa53a96476ccaae0c93bd9af0493ef8431e4b.zip
fix(term): make F9 and F12 reach Emacs inside ghostel buffers
F9 did nothing in an agent buffer: ghostel's semi-char mode forwards every key not in ghostel-keymap-exceptions to the pty, and ghostel-semi-char-mode-map outranks the major-mode map, so the F9-family and F12 bindings I'd put in ghostel-mode-map never fired. The keys went to Claude/the shell, which ignored them. I added the F9 family (in ai-term) and F12 plus C-; (in term-config) to ghostel-keymap-exceptions and rebuilt the semi-char map with ghostel--rebuild-semi-char-keymap. add-to-list updates the list but not the already-built map, so the rebuild is what actually lets the keys through. C-; had the same latent bug for the same reason. Two regression tests assert the keys are in the exceptions and that the rebuilt semi-char map no longer forwards them. I also corrected the spec note that claimed binding in ghostel-mode-map was enough (true for vterm, wrong for ghostel) and codified the gotcha.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-ai-term--f9-in-term.el11
-rw-r--r--tests/test-term-tmux-history.el9
2 files changed, 20 insertions, 0 deletions
diff --git a/tests/test-ai-term--f9-in-term.el b/tests/test-ai-term--f9-in-term.el
index 53e1c4e7..dad11ffc 100644
--- a/tests/test-ai-term--f9-in-term.el
+++ b/tests/test-ai-term--f9-in-term.el
@@ -41,5 +41,16 @@ agent; `M-<f9>' and `C-S-<f9>' close an agent via `cj/ai-term-close'."
(should (eq (lookup-key (current-global-map) (kbd "M-<f9>")) #'cj/ai-term-close))
(should (eq (lookup-key (current-global-map) (kbd "C-S-<f9>")) #'cj/ai-term-close)))
+(ert-deftest test-ai-term-f9-family-in-keymap-exceptions ()
+ "Regression: the F9 family is in `ghostel-keymap-exceptions' so semi-char
+mode lets it reach Emacs instead of forwarding it to the terminal program.
+Binding in `ghostel-mode-map' alone is not enough -- the semi-char map outranks
+it and forwards any key not in the exceptions to the pty."
+ (dolist (key '("<f9>" "C-<f9>" "M-<f9>" "C-S-<f9>"))
+ (should (member key ghostel-keymap-exceptions)))
+ ;; The rebuilt semi-char map must no longer forward <f9> to the pty.
+ (should-not (eq (keymap-lookup ghostel-semi-char-mode-map "<f9>")
+ 'ghostel--send-event)))
+
(provide 'test-ai-term--f9-in-term)
;;; test-ai-term--f9-in-term.el ends here
diff --git a/tests/test-term-tmux-history.el b/tests/test-term-tmux-history.el
index 2c9c38f8..49296b42 100644
--- a/tests/test-term-tmux-history.el
+++ b/tests/test-term-tmux-history.el
@@ -308,5 +308,14 @@ its own copy-mode against the full pane history."
(when (buffer-live-p agent)
(kill-buffer agent)))))
+(ert-deftest test-term-prefix-and-f12-in-keymap-exceptions ()
+ "Regression: C-; and F12 are in `ghostel-keymap-exceptions' and the rebuilt
+semi-char map no longer forwards them to the pty, so the prefix keymap and the
+F12 toggle reach Emacs inside ghostel buffers."
+ (dolist (key '("C-;" "<f12>"))
+ (should (member key ghostel-keymap-exceptions)))
+ (should-not (eq (keymap-lookup ghostel-semi-char-mode-map "<f12>")
+ 'ghostel--send-event)))
+
(provide 'test-term-tmux-history)
;;; test-term-tmux-history.el ends here