aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/ai-term.el13
-rw-r--r--modules/term-config.el12
2 files changed, 22 insertions, 3 deletions
diff --git a/modules/ai-term.el b/modules/ai-term.el
index 85b84a12..1384f812 100644
--- a/modules/ai-term.el
+++ b/modules/ai-term.el
@@ -74,6 +74,8 @@
(declare-function ghostel "ghostel" (&optional arg))
(declare-function ghostel-send-string "ghostel" (string))
+(declare-function ghostel--rebuild-semi-char-keymap "ghostel" ())
+(defvar ghostel-keymap-exceptions)
(defvar ghostel-mode-map)
(defvar ghostel-buffer-name)
(defvar ghostel-buffer-name-function)
@@ -923,7 +925,16 @@ interrupt work in progress. Bound to M-<f9> (primary) and C-S-<f9>."
(keymap-set ghostel-mode-map "<f9>" #'cj/ai-term)
(keymap-set ghostel-mode-map "C-<f9>" #'cj/ai-term-pick-project)
(keymap-set ghostel-mode-map "M-<f9>" #'cj/ai-term-close)
- (keymap-set ghostel-mode-map "C-S-<f9>" #'cj/ai-term-close))
+ (keymap-set ghostel-mode-map "C-S-<f9>" #'cj/ai-term-close)
+ ;; The bindings above live in `ghostel-mode-map', but in semi-char mode
+ ;; ghostel's own `ghostel-semi-char-mode-map' forwards every key not in
+ ;; `ghostel-keymap-exceptions' to the pty -- and that map outranks the
+ ;; major-mode map, so it would swallow the F9 family before the bindings
+ ;; above fire. Add the family to the exceptions and rebuild the semi-char
+ ;; map so the keys fall through to `ghostel-mode-map' inside agent buffers.
+ (dolist (key '("<f9>" "C-<f9>" "M-<f9>" "C-S-<f9>"))
+ (add-to-list 'ghostel-keymap-exceptions key))
+ (ghostel--rebuild-semi-char-keymap))
;; ---------- emacsclient: keep opened files off the agent terminal ----------
;;
diff --git a/modules/term-config.el b/modules/term-config.el
index 84ba7b3b..b327777a 100644
--- a/modules/term-config.el
+++ b/modules/term-config.el
@@ -53,6 +53,7 @@
(declare-function ghostel-next-prompt "ghostel" (&optional n))
(declare-function ghostel-previous-prompt "ghostel" (&optional n))
(declare-function ghostel-send-next-key "ghostel" ())
+(declare-function ghostel--rebuild-semi-char-keymap "ghostel" ())
(defvar ghostel-mode-map)
(defvar ghostel-keymap-exceptions)
(defvar ghostel-buffer-name)
@@ -220,9 +221,16 @@ run its own project-named tmux session instead of a bare, auto-named one.
:ensure t
:commands (ghostel)
:init
- ;; C-; must reach Emacs so the personal prefix keymap works in terminals.
+ ;; C-; and F12 must reach Emacs (not the terminal program) inside ghostel
+ ;; buffers. In semi-char mode ghostel forwards every key NOT in
+ ;; `ghostel-keymap-exceptions' to the pty, and `ghostel-semi-char-mode-map'
+ ;; is rebuilt from that list by `ghostel--rebuild-semi-char-keymap' --
+ ;; `add-to-list' alone updates the list but not the already-built map, so the
+ ;; rebuild is what actually lets the key through to `ghostel-mode-map'.
(with-eval-after-load 'ghostel
- (add-to-list 'ghostel-keymap-exceptions "C-;"))
+ (dolist (key '("C-;" "<f12>"))
+ (add-to-list 'ghostel-keymap-exceptions key))
+ (ghostel--rebuild-semi-char-keymap))
:hook
((ghostel-mode . cj/turn-off-chrome-for-term)
(ghostel-mode . cj/term-launch-tmux))