@@ -39,12 +39,18 @@ var keys = keyMap{
3939 key.WithKeys("ctrl+_"),
4040 key.WithHelp("ctrl+?", "toggle help"),
4141 ),
42+
4243 SwitchSession: key.NewBinding(
4344 key.WithKeys("ctrl+a"),
4445 key.WithHelp("ctrl+a", "switch session"),
4546 ),
4647}
4748
49+var helpEsc = key.NewBinding(
50+ key.WithKeys("?"),
51+ key.WithHelp("?", "toggle help"),
52+)
53+
4854var returnKey = key.NewBinding(
4955 key.WithKeys("esc"),
5056 key.WithHelp("esc", "close"),
@@ -61,7 +67,7 @@ type appModel struct {
6167 previousPage page.PageID
6268 pages map[page.PageID]tea.Model
6369 loadedPages map[page.PageID]bool
64− status tea.Model
70+ status core.StatusCmp
6571 app *app.App
6672
6773 showPermissions bool
@@ -75,6 +81,8 @@ type appModel struct {
7581
7682 showSessionDialog bool
7783 sessionDialog dialog.SessionDialog
84+
85+ editingMode bool
7886}
7987
8088func (a appModel) Init() tea.Cmd {
@@ -101,7 +109,8 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
101109 msg.Height -= 1 // Make space for the status bar
102110 a.width, a.height = msg.Width, msg.Height
103111
104− a.status, _ = a.status.Update(msg)
112+ s, _ := a.status.Update(msg)
113+ a.status = s.(core.StatusCmp)
105114 a.pages[a.currentPage], cmd = a.pages[a.currentPage].Update(msg)
106115 cmds = append(cmds, cmd)
107116
@@ -118,45 +127,56 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
118127 cmds = append(cmds, sessionCmd)
119128
120129 return a, tea.Batch(cmds...)
121−
130+ case chat.EditorFocusMsg:
131+ a.editingMode = bool(msg)
122132 // Status
123133 case util.InfoMsg:
124− a.status, cmd = a.status.Update(msg)
134+ s, cmd := a.status.Update(msg)
135+ a.status = s.(core.StatusCmp)
125136 cmds = append(cmds, cmd)
126137 return a, tea.Batch(cmds...)
127138 case pubsub.Event[logging.LogMessage]:
128139 if msg.Payload.Persist {
129140 switch msg.Payload.Level {
130141 case "error":
131− a.status, cmd = a.status.Update(util.InfoMsg{
142+ s, cmd := a.status.Update(util.InfoMsg{
132143 Type: util.InfoTypeError,
133144 Msg: msg.Payload.Message,
134145 TTL: msg.Payload.PersistTime,
135146 })
147+ a.status = s.(core.StatusCmp)
148+ cmds = append(cmds, cmd)
136149 case "info":
137− a.status, cmd = a.status.Update(util.InfoMsg{
150+ s, cmd := a.status.Update(util.InfoMsg{
138151 Type: util.InfoTypeInfo,
139152 Msg: msg.Payload.Message,
140153 TTL: msg.Payload.PersistTime,
141154 })
155+ a.status = s.(core.StatusCmp)
156+ cmds = append(cmds, cmd)
157+
142158 case "warn":
143− a.status, cmd = a.status.Update(util.InfoMsg{
159+ s, cmd := a.status.Update(util.InfoMsg{
144160 Type: util.InfoTypeWarn,
145161 Msg: msg.Payload.Message,
146162 TTL: msg.Payload.PersistTime,
147163 })
148164
165+ a.status = s.(core.StatusCmp)
166+ cmds = append(cmds, cmd)
149167 default:
150− a.status, cmd = a.status.Update(util.InfoMsg{
168+ s, cmd := a.status.Update(util.InfoMsg{
151169 Type: util.InfoTypeInfo,
152170 Msg: msg.Payload.Message,
153171 TTL: msg.Payload.PersistTime,
154172 })
173+ a.status = s.(core.StatusCmp)
174+ cmds = append(cmds, cmd)
155175 }
156− cmds = append(cmds, cmd)
157176 }
158177 case util.ClearStatusMsg:
159− a.status, _ = a.status.Update(msg)
178+ s, _ := a.status.Update(msg)
179+ a.status = s.(core.StatusCmp)
160180
161181 // Permission
162182 case pubsub.Event[permission.PermissionRequest]:
@@ -243,7 +263,16 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
243263 }
244264 a.showHelp = !a.showHelp
245265 return a, nil
266+ case key.Matches(msg, helpEsc):
267+ if !a.editingMode {
268+ if a.showQuit {
269+ return a, nil
270+ }
271+ a.showHelp = !a.showHelp
272+ return a, nil
273+ }
246274 }
275+
247276 }
248277
249278 if a.showQuit {
@@ -275,7 +304,8 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
275304 }
276305 }
277306
278− a.status, _ = a.status.Update(msg)
307+ s, _ := a.status.Update(msg)
308+ a.status = s.(core.StatusCmp)
279309 a.pages[a.currentPage], cmd = a.pages[a.currentPage].Update(msg)
280310 cmds = append(cmds, cmd)
281311 return a, tea.Batch(cmds...)
@@ -326,6 +356,12 @@ func (a appModel) View() string {
326356 )
327357 }
328358
359+ if a.editingMode {
360+ a.status.SetHelpMsg("ctrl+? help")
361+ } else {
362+ a.status.SetHelpMsg("? help")
363+ }
364+
329365 if a.showHelp {
330366 bindings := layout.KeyMapToSlice(keys)
331367 if p, ok := a.pages[a.currentPage].(layout.Bindings); ok {
@@ -337,7 +373,9 @@ func (a appModel) View() string {
337373 if a.currentPage == page.LogsPage {
338374 bindings = append(bindings, logsKeyReturnKey)
339375 }
340−
376+ if !a.editingMode {
377+ bindings = append(bindings, helpEsc)
378+ }
341379 a.help.SetBindings(bindings)
342380
343381 overlay := a.help.View()
@@ -398,6 +436,7 @@ func New(app *app.App) tea.Model {
398436 sessionDialog: dialog.NewSessionDialogCmp(),
399437 permissions: dialog.NewPermissionDialogCmp(),
400438 app: app,
439+ editingMode: true,
401440 pages: map[page.PageID]tea.Model{
402441 page.ChatPage: page.NewChatPage(app),
403442 page.LogsPage: page.NewLogsPage(),