summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorWalter <[email protected]>2025-10-20 05:16:54 +0200
committerGitHub <[email protected]>2025-10-19 22:16:54 -0500
commit6adc16ca8a9883df828499a1b48d1f340fa0b5df (patch)
treebd609f14283497c95d91f6c21917533101b3a414 /packages
parent10ebe9ae09c6ef3ddbdb741c17c8c8f2aef79c5a (diff)
downloadopencode-6adc16ca8a9883df828499a1b48d1f340fa0b5df.tar.gz
opencode-6adc16ca8a9883df828499a1b48d1f340fa0b5df.zip
fix(tui): Allow modals to handle ESC key before force closing (#3279)
Diffstat (limited to 'packages')
-rw-r--r--packages/tui/internal/tui/tui.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/packages/tui/internal/tui/tui.go b/packages/tui/internal/tui/tui.go
index 50b503c66..da77b42f2 100644
--- a/packages/tui/internal/tui/tui.go
+++ b/packages/tui/internal/tui/tui.go
@@ -162,9 +162,15 @@ func (a Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
// 1. Handle active modal
if a.modal != nil {
switch keyString {
- // Escape always closes current modal
+ // Escape closes current modal, but give modal a chance to handle it first
case "esc":
- cmd := a.modal.Close()
+ // give the modal a chance to handle the esc
+ updatedModal, cmd := a.modal.Update(msg)
+ a.modal = updatedModal.(layout.Modal)
+ if cmd != nil {
+ return a, cmd
+ }
+ cmd = a.modal.Close()
a.modal = nil
return a, cmd
case "ctrl+c":