Skip to content

Commit 7d5e956

Browse files
committed
Fix keymaps being lost when cursor is at eca buttons
1 parent ddb8d87 commit 7d5e956

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

eca-chat.el

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ Must be a positive integer."
469469
")"))))
470470
(concat (propertize "\n" 'font-lock-face 'eca-chat-tool-call-spacing-face)
471471
(eca-buttonize
472+
eca-chat-mode-map
472473
(propertize "Accept"
473474
'eca-tool-call-pending-approval-accept t
474475
'line-prefix spacing-line-prefix
@@ -483,6 +484,7 @@ Must be a positive integer."
483484
'font-lock-face 'eca-chat-tool-call-keybinding-face)
484485
(propertize "\n" 'font-lock-face 'eca-chat-tool-call-spacing-face)
485486
(eca-buttonize
487+
eca-chat-mode-map
486488
(propertize "Reject"
487489
'eca-tool-call-pending-approval-reject t
488490
'line-prefix spacing-line-prefix
@@ -542,6 +544,7 @@ Otherwise to a not loading state."
542544
(setq-local buffer-read-only loading)
543545
(let ((prompt-field-ov (eca-chat--prompt-field-ov))
544546
(stop-text (eca-buttonize
547+
eca-chat-mode-map
545548
(propertize "stop" 'font-lock-face 'eca-chat-prompt-stop-face)
546549
(lambda () (eca-chat--stop-prompt session)))))
547550
(if eca-chat--chat-loading
@@ -1037,9 +1040,11 @@ If FORCE? decide to OPEN? or not."
10371040
"Return a diff block for relative PATH from ROOTS with DIFF."
10381041
(concat "\n"
10391042
(if (f-exists? path)
1040-
(eca-buttonize (propertize (eca-chat--relativize-filename-for-workspace-root path roots)
1041-
'font-lock-face 'eca-chat-file-path-face)
1042-
(lambda () (find-file-other-window path)))
1043+
(eca-buttonize
1044+
eca-chat-mode-map
1045+
(propertize (eca-chat--relativize-filename-for-workspace-root path roots)
1046+
'font-lock-face 'eca-chat-file-path-face)
1047+
(lambda () (find-file-other-window path)))
10431048
path) "\n"
10441049
"```diff\n" diff "\n```"))
10451050

@@ -1492,6 +1497,7 @@ string."
14921497
(eca-chat--add-header
14931498
(concat "🌐 "
14941499
(eca-buttonize
1500+
eca-chat-mode-map
14951501
(plist-get content :title)
14961502
(lambda () (browse-url (plist-get content :url))))
14971503
"\n\n")))
@@ -1563,6 +1569,7 @@ string."
15631569
(let* ((path (plist-get details :path))
15641570
(diff (plist-get details :diff))
15651571
(view-diff-btn (eca-buttonize
1572+
eca-chat-mode-map
15661573
(propertize "view_diff" 'font-lock-face 'eca-chat-diff-view-face)
15671574
(lambda ()
15681575
(interactive)
@@ -1604,6 +1611,7 @@ string."
16041611
(diff (plist-get details :diff))
16051612
(view-diff-btn
16061613
(eca-buttonize
1614+
eca-chat-mode-map
16071615
(propertize "view_diff" 'font-lock-face 'eca-chat-diff-view-face)
16081616
`(lambda ()
16091617
(interactive)
@@ -1649,6 +1657,7 @@ string."
16491657
(diff (plist-get details :diff))
16501658
(view-diff-btn
16511659
(eca-buttonize
1660+
eca-chat-mode-map
16521661
(propertize "view_diff" 'font-lock-face 'eca-chat-diff-view-face)
16531662
`(lambda ()
16541663
(interactive)

eca-mcp.el

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@
8888
(if (or (string= "running" status)
8989
(string= "starting" status))
9090
(eca-buttonize
91+
eca-mcp-details-mode-map
9192
(propertize "stop" 'font-lock-face 'eca-mcp-details-button-face)
9293
(lambda () (eca-api-notify session
9394
:method "mcp/stopServer"
9495
:params (list :name name))))
9596
(eca-buttonize
97+
eca-mcp-details-mode-map
9698
(propertize "start" 'font-lock-face 'eca-mcp-details-button-face)
9799
(lambda () (eca-api-notify session
98100
:method "mcp/startServer"

eca-util.el

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,10 @@
164164
"Display eca error message with FORMAT with ARGS."
165165
(message "%s :: %s" (propertize "ECA" 'face 'error) (apply #'format format args)))
166166

167-
(defun eca-buttonize (text callback)
168-
"Create a actionable TEXT that call CALLBACK when actioned."
169-
(let ((km (make-sparse-keymap))
167+
(defun eca-buttonize (base-map text callback)
168+
"Create a actionable TEXT that call CALLBACK when actioned.
169+
Inheirits BASE-MAP."
170+
(let ((km (make-composed-keymap (make-sparse-keymap) base-map))
170171
(callback-int (lambda (&rest _)
171172
(interactive)
172173
(funcall callback))))

0 commit comments

Comments
 (0)