diff options
Diffstat (limited to 'internal/ui/ultra.go')
| -rw-r--r-- | internal/ui/ultra.go | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/internal/ui/ultra.go b/internal/ui/ultra.go index 4bb9542..e84b472 100644 --- a/internal/ui/ultra.go +++ b/internal/ui/ultra.go @@ -475,10 +475,7 @@ func (m *Model) handleUltraSearchMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) case "enter": // Empty input clears the filter; non-empty confirms and keeps it. if strings.TrimSpace(m.ultraSearchInput.Value()) == "" { - m.ultraSearchRegex = nil - m.ultraFiltered = nil - m.ultraCursor = 0 - m.ultraOffset = 0 + m.clearUltraSearchState() } m.ultraSearching = false m.ultraSearchInput.Blur() @@ -488,10 +485,7 @@ func (m *Model) handleUltraSearchMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) m.ultraSearching = false m.ultraSearchInput.SetValue("") m.ultraSearchInput.Blur() - m.ultraSearchRegex = nil - m.ultraFiltered = nil - m.ultraCursor = 0 - m.ultraOffset = 0 + m.clearUltraSearchState() return m, nil } @@ -513,10 +507,7 @@ func (m *Model) handleUltraSearchMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) func (m *Model) ultraApplySearch(value string) { value = strings.TrimSpace(value) if value == "" { - m.ultraSearchRegex = nil - m.ultraFiltered = nil - m.ultraCursor = 0 - m.ultraOffset = 0 + m.clearUltraSearchState() return } // Prepend (?i) for case-insensitive matching unless the user already @@ -1016,19 +1007,13 @@ func (m *Model) handleUltraMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) { case "esc": return m.handleEscapeKey() case "u": - // Toggle back to the traditional table view. Works even when started - // via --ultra because the table model always exists; it was just never - // shown. The user can press u again to return to ultra mode. - m.ultraClearFocusedID() - m.showUltra = false - m.ultraStartup = false // no longer forced into ultra-only mode - m.ultraSearchRegex = nil - m.ultraFiltered = nil - m.ultraSearchInput.SetValue("") + cursor := m.ultraCursor + m.leaveUltraMode() + m.ultraStartup = false // Sync the table cursor to the task we were on in ultra mode. tasks := m.ultraTaskList() - if m.ultraCursor >= 0 && m.ultraCursor < len(tasks) { - m.tbl.SetCursor(m.ultraCursor) + if cursor >= 0 && cursor < len(tasks) { + m.tbl.SetCursor(cursor) } return m, nil case "/": @@ -1142,6 +1127,35 @@ func (m *Model) ultraClearFocusedID() { m.ultraFocusedID = 0 } +func (m *Model) clearUltraSearchState() { + m.ultraSearchRegex = nil + m.ultraFiltered = nil + m.ultraCursor = 0 + m.ultraOffset = 0 +} + +func (m *Model) leaveUltraMode() { + m.ultraClearFocusedID() + m.showUltra = false + m.ultraSearchInput.SetValue("") + m.clearUltraSearchState() +} + +func (m *Model) handleUltraExitKey(quit bool) (tea.Model, tea.Cmd) { + if m.ultraSearchRegex != nil { + m.clearUltraSearchState() + return m, nil + } + if m.ultraStartup { + if quit { + return m, tea.Quit + } + return m, nil + } + m.leaveUltraMode() + return m, nil +} + func (m *Model) ultraPrepareSelectedTask() (int, bool) { id, err := m.getUltraSelectedTaskID() if err != nil { |
