diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-05 14:48:43 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-05 14:48:43 -0500 |
| commit | 524b3453cc4fc7309ffa802b291592e151c73ef3 (patch) | |
| tree | 4fc58aae1c23be39ca4c177c4226c6ded9c7e629 | |
| parent | 619131d92ad9f442a89cb41ade707a8eb5bc3d3d (diff) | |
| download | dotemacs-524b3453cc4fc7309ffa802b291592e151c73ef3.tar.gz dotemacs-524b3453cc4fc7309ffa802b291592e151c73ef3.zip | |
fix(term): forward F10 and C-F10 to Emacs in ghostel buffers
Inside a ghostel terminal or agent buffer, semi-char mode forwarded F10 and C-F10 to the pty, so the music-playlist toggle and the server-shutdown command never ran. Both are global bindings with no ghostel-mode-map entry, so I added them to ghostel-keymap-exceptions and rebuilt the semi-char map. The lookup then falls through to the global map. Same shape as the earlier F9, F12, and window-nav fixes.
| -rw-r--r-- | modules/term-config.el | 7 | ||||
| -rw-r--r-- | tests/test-term-tmux-history.el | 11 |
2 files changed, 16 insertions, 2 deletions
diff --git a/modules/term-config.el b/modules/term-config.el index 5753edde..7cd386dc 100644 --- a/modules/term-config.el +++ b/modules/term-config.el @@ -229,9 +229,12 @@ run its own project-named tmux session instead of a bare, auto-named one. ;; rebuild is what actually lets the key through to `ghostel-mode-map' / the ;; global map. C-; and F12 are the prefix + toggle; the modified arrows are ;; windmove (S-arrows, focus) and buffer-move (C-M-arrows, swap), which the - ;; ai-term workflow expects to work from inside an agent buffer. + ;; ai-term workflow expects to work from inside an agent buffer. F10 and + ;; C-F10 are global bindings (music-playlist toggle, server shutdown) that + ;; reach Emacs by falling through to the global map once the semi-char map + ;; stops forwarding them. (with-eval-after-load 'ghostel - (dolist (key '("C-;" "<f12>" + (dolist (key '("C-;" "<f12>" "<f10>" "C-<f10>" "S-<up>" "S-<down>" "S-<left>" "S-<right>" "C-M-<up>" "C-M-<down>" "C-M-<left>" "C-M-<right>")) (add-to-list 'ghostel-keymap-exceptions key)) diff --git a/tests/test-term-tmux-history.el b/tests/test-term-tmux-history.el index 1bb7e73b..b7ab5351 100644 --- a/tests/test-term-tmux-history.el +++ b/tests/test-term-tmux-history.el @@ -327,6 +327,17 @@ instead of being forwarded to the terminal program." (should-not (eq (keymap-lookup ghostel-semi-char-mode-map "C-M-<left>") 'ghostel--send-event))) +(ert-deftest test-term-f10-music-and-shutdown-in-keymap-exceptions () + "Regression: F10 (music playlist toggle) and C-F10 (server shutdown) are in +`ghostel-keymap-exceptions' so they reach Emacs from inside a ghostel buffer +instead of being forwarded to the terminal program. Both are global bindings, +so dropping them from the semi-char map lets the lookup fall through to the +global map." + (dolist (key '("<f10>" "C-<f10>")) + (should (member key ghostel-keymap-exceptions))) + (should-not (eq (keymap-lookup ghostel-semi-char-mode-map "<f10>") + 'ghostel--send-event))) + (ert-deftest test-term-c-spc-forwarded-not-set-mark () "Regression: C-SPC is forwarded to the terminal, not bound to the global `set-mark-command'. ghostel only forwards the `C-@' event, so without this an |
