diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-26 05:37:25 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-26 05:37:25 -0400 |
| commit | 1f10ea49e33c5f09a43e95bc30e818899bf4826d (patch) | |
| tree | 9b8247d12c9afb88376deb84c858e73be89f9f8b /modules/eat-config.el | |
| parent | 108512df855a83cb98f330ee6cf6f22168c0d76d (diff) | |
| download | dotemacs-1f10ea49e33c5f09a43e95bc30e818899bf4826d.tar.gz dotemacs-1f10ea49e33c5f09a43e95bc30e818899bf4826d.zip | |
fix(eat): make Escape the unified copy-mode exit
EAT's semi-char mode left the bare escape key unbound and treated ESC only as the Meta prefix, so a lone Escape never reached the pty. That is why C-<up>'s tmux copy-mode could not be exited with Escape: tmux's own Escape=cancel binding never saw the key. Bind <escape> to forward ESC to the terminal, so it cancels tmux copy-mode and still works in TUIs like vim. Also bind <escape> in eat-mode-map to return to semi-char, so the same key exits EAT's own emacs and char modes. One exit key for both copy views; q is no longer required.
Diffstat (limited to 'modules/eat-config.el')
| -rw-r--r-- | modules/eat-config.el | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/modules/eat-config.el b/modules/eat-config.el index d8319e649..de919a00a 100644 --- a/modules/eat-config.el +++ b/modules/eat-config.el @@ -245,6 +245,16 @@ terminal. ai-term's agent buffers are managed separately via M-SPC." (when (process-live-p proc) (process-send-string proc string)))) +(defun cj/term-send-escape () + "Send ESC to the terminal. +In tmux copy-mode this cancels it (tmux binds Escape to cancel); in a TUI like +vim it forwards ESC normally. EAT's semi-char mode leaves the bare escape key +unbound and treats `ESC' only as the Meta prefix, so without this the key never +reaches the pty -- which is why C-<up>'s tmux copy-mode could not be exited with +Escape." + (interactive) + (cj/--term-send-string "\e")) + (defun cj/term--tmux-output (&rest args) "Run tmux with ARGS and return its stdout. Signal `user-error' when tmux exits with a non-zero status." @@ -419,8 +429,15 @@ pty; without tmux, moves point up in EAT's emacs-mode buffer." (keymap-set cj/term-map "h" #'cj/term-tmux-history) (keymap-set cj/term-map "t" #'cj/term-toggle) +(defvar eat-mode-map) +(declare-function eat-semi-char-mode "eat") (with-eval-after-load 'eat - (keymap-set eat-semi-char-mode-map "C-<up>" #'cj/term-copy-mode-up)) + (keymap-set eat-semi-char-mode-map "C-<up>" #'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 "<escape>" #'cj/term-send-escape) + (keymap-set eat-mode-map "<escape>" #'eat-semi-char-mode)) (provide 'eat-config) ;;; eat-config.el ends here |
