@@ -7,6 +7,7 @@ import (
11 "charm.land/bubbles/v2/help"
12 "charm.land/bubbles/v2/help"
12 "charm.land/bubbles/v2/key"
13 "charm.land/bubbles/v2/key"
@@ -177,7 +178,10 @@ func (m *UI) Init() tea.Cmd {
178 allSessions, _ := m.com.App.Sessions.List(context.Background())
179 allSessions, _ := m.com.App.Sessions.List(context.Background())
179 if len(allSessions) > 0 {
180 if len(allSessions) > 0 {
181+ cmds = append(cmds, func() tea.Msg {
182+ time.Sleep(2 * time.Second)
180− cmds = append(cmds, m.loadSession(allSessions[0].ID))
183+ return m.loadSession(allSessions[0].ID)()
182 return tea.Batch(cmds...)
186 return tea.Batch(cmds...)
@@ -300,10 +304,30 @@ func (m *UI) handleKeyPressMsg(msg tea.KeyPressMsg) (cmds []tea.Cmd) {
300 return m.updateDialogs(msg)
304 return m.updateDialogs(msg)
307+ handleGlobalKeys := func(msg tea.KeyPressMsg) {
303− switch {
308+ switch {
304− case key.Matches(msg, m.keyMap.Tab):
309+ case key.Matches(msg, m.keyMap.Tab):
310+ case key.Matches(msg, m.keyMap.Help):
311+ m.help.ShowAll = !m.help.ShowAll
312+ m.updateLayoutAndSize()
313+ case key.Matches(msg, m.keyMap.Quit):
314+ if !m.dialog.ContainsDialog(dialog.QuitDialogID) {
315+ m.dialog.AddDialog(dialog.NewQuit(m.com))
318+ case key.Matches(msg, m.keyMap.Commands):
319+ // TODO: Implement me
320+ case key.Matches(msg, m.keyMap.Models):
321+ // TODO: Implement me
322+ case key.Matches(msg, m.keyMap.Sessions):
323+ // TODO: Implement me
305− switch m.state {
327+ switch m.state {
306− case uiChat:
328+ case uiChat:
330+ case key.Matches(msg, m.keyMap.Tab):
307 if m.focus == uiFocusMain {
331 if m.focus == uiFocusMain {
308 m.focus = uiFocusEditor
332 m.focus = uiFocusEditor
309 cmds = append(cmds, m.textarea.Focus())
333 cmds = append(cmds, m.textarea.Focus())
@@ -314,26 +338,47 @@ func (m *UI) handleKeyPressMsg(msg tea.KeyPressMsg) (cmds []tea.Cmd) {
314 m.chat.Focus()
338 m.chat.Focus()
315 m.chat.SetSelectedIndex(m.chat.Len() - 1)
339 m.chat.SetSelectedIndex(m.chat.Len() - 1)
341+ case key.Matches(msg, m.keyMap.Chat.Up):
343+ if !m.chat.SelectedItemInView() {
345+ m.chat.ScrollToSelected()
347+ case key.Matches(msg, m.keyMap.Chat.Down):
349+ if !m.chat.SelectedItemInView() {
351+ m.chat.ScrollToSelected()
353+ case key.Matches(msg, m.keyMap.Chat.UpOneItem):
355+ m.chat.ScrollToSelected()
356+ case key.Matches(msg, m.keyMap.Chat.DownOneItem):
358+ m.chat.ScrollToSelected()
359+ case key.Matches(msg, m.keyMap.Chat.HalfPageUp):
360+ m.chat.ScrollBy(-m.chat.Height() / 2)
361+ m.chat.SelectFirstInView()
362+ case key.Matches(msg, m.keyMap.Chat.HalfPageDown):
363+ m.chat.ScrollBy(m.chat.Height() / 2)
364+ m.chat.SelectLastInView()
365+ case key.Matches(msg, m.keyMap.Chat.PageUp):
366+ m.chat.ScrollBy(-m.chat.Height())
367+ m.chat.SelectFirstInView()
368+ case key.Matches(msg, m.keyMap.Chat.PageDown):
369+ m.chat.ScrollBy(m.chat.Height())
370+ m.chat.SelectLastInView()
371+ case key.Matches(msg, m.keyMap.Chat.Home):
372+ m.chat.ScrollToTop()
373+ m.chat.SelectFirst()
374+ case key.Matches(msg, m.keyMap.Chat.End):
375+ m.chat.ScrollToBottom()
378+ handleGlobalKeys(msg)
318− case key.Matches(msg, m.keyMap.Help):
380+ default:
319− m.help.ShowAll = !m.help.ShowAll
381+ handleGlobalKeys(msg)
320− m.updateLayoutAndSize()
322− case key.Matches(msg, m.keyMap.Quit):
323− if !m.dialog.ContainsDialog(dialog.QuitDialogID) {
324− m.dialog.AddDialog(dialog.NewQuit(m.com))
328− case key.Matches(msg, m.keyMap.Commands):
329− // TODO: Implement me
331− case key.Matches(msg, m.keyMap.Models):
332− // TODO: Implement me
334− case key.Matches(msg, m.keyMap.Sessions):
335− // TODO: Implement me
339 cmds = append(cmds, m.updateFocused(msg)...)
384 cmds = append(cmds, m.updateFocused(msg)...)