diff --git a/ui/components/selector/selector.go b/ui/components/selector/selector.go index 4beea1fe3e6ca934688c680bcebdeceaf9af6a73..9c99755f506837eb7ac86ab83c2b3ad2871a1d5b 100644 --- a/ui/components/selector/selector.go +++ b/ui/components/selector/selector.go @@ -143,6 +143,20 @@ func (s *Selector) Update(msg tea.Msg) (tea.Model, tea.Cmd) { s.Model.CursorUp() case tea.MouseWheelDown: s.Model.CursorDown() + case tea.MouseLeft: + curIdx := s.Model.Index() + for i, item := range s.Model.Items() { + item, _ := item.(IdentifiableItem) + // Check each item to see if it's in bounds. + if item != nil && s.common.Zone.Get(item.ID()).InBounds(msg) { + if i == curIdx { + cmds = append(cmds, s.selectCmd) + } else { + s.Model.Select(i) + } + break + } + } } case tea.KeyMsg: filterState := s.Model.FilterState() diff --git a/ui/pages/repo/filesitem.go b/ui/pages/repo/filesitem.go index 1934b440ad5ab1bea0869403dfbdcaf226b3d87f..1d64cb8d13e1ed7ba3262159dfc6686d6bc00ba0 100644 --- a/ui/pages/repo/filesitem.go +++ b/ui/pages/repo/filesitem.go @@ -146,10 +146,13 @@ func (d FileItemDelegate) Render(w io.Writer, m list.Model, index int, listItem s.Selector.GetHorizontalFrameSize() - s.Selector.GetWidth()) fmt.Fprint(w, - truncate.Render(fmt.Sprintf("%s%s%s", - modeStr, - size, - name, - )), + d.common.Zone.Mark( + i.ID(), + truncate.Render(fmt.Sprintf("%s%s%s", + modeStr, + size, + name, + )), + ), ) } diff --git a/ui/pages/repo/logitem.go b/ui/pages/repo/logitem.go index 410a7e90e12013db11fc907820e6602d853d1758..b30c21d67f4b371c121b0007c5b93073811e078d 100644 --- a/ui/pages/repo/logitem.go +++ b/ui/pages/repo/logitem.go @@ -137,13 +137,16 @@ func (d LogItemDelegate) Render(w io.Writer, m list.Model, index int, listItem l who += styles.Desc.Render("on ") + styles.Keyword.Render(date) who = common.TruncateString(who, m.Width()-horizontalFrameSize) fmt.Fprint(w, - styles.Base.Render( - lipgloss.JoinVertical(lipgloss.Top, - truncate.String(fmt.Sprintf("%s%s", - title, - hash, - ), uint(m.Width()-horizontalFrameSize)), - who, + d.common.Zone.Mark( + i.ID(), + styles.Base.Render( + lipgloss.JoinVertical(lipgloss.Top, + truncate.String(fmt.Sprintf("%s%s", + title, + hash, + ), uint(m.Width()-horizontalFrameSize)), + who, + ), ), ), ) diff --git a/ui/pages/repo/refsitem.go b/ui/pages/repo/refsitem.go index cfae1a3d4aaf12e3293d20f818269d9b1f99a29e..ec378696f450278914c13eadf51f25b1b458a95e 100644 --- a/ui/pages/repo/refsitem.go +++ b/ui/pages/repo/refsitem.go @@ -121,5 +121,10 @@ func (d RefItemDelegate) Render(w io.Writer, m list.Model, index int, listItem l s.Normal.Item.GetMarginLeft() ref = common.TruncateString(ref, refMaxWidth) ref = st.Render(ref) - fmt.Fprint(w, selector, ref) + fmt.Fprint(w, + d.common.Zone.Mark( + i.ID(), + fmt.Sprint(selector, ref), + ), + ) } diff --git a/ui/pages/selection/item.go b/ui/pages/selection/item.go index 3db9edeb142ef0c3887a3aec3e0d6e9e97726666..97abe72c1669a702c352183db1118ce84adeb58c 100644 --- a/ui/pages/selection/item.go +++ b/ui/pages/selection/item.go @@ -141,5 +141,9 @@ func (d ItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list cmd = styles.Command.Render("Copied!") } s.WriteString(cmd) - fmt.Fprint(w, styles.Base.Render(s.String())) + fmt.Fprint(w, + d.common.Zone.Mark(i.ID(), + styles.Base.Render(s.String()), + ), + ) } diff --git a/ui/ui.go b/ui/ui.go index 2e0db8c8009d6d2048e76d2585216df9d6dcdc55..43ed760d82db723a7d3f6503774e91e3cd36a624 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -186,6 +186,8 @@ func (ui *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case key.Matches(msg, ui.common.KeyMap.Help): cmds = append(cmds, footer.ToggleFooterCmd) case key.Matches(msg, ui.common.KeyMap.Quit): + // Stop bubblezone background workers. + ui.common.Zone.Close() return ui, tea.Quit case ui.activePage == repoPage && key.Matches(msg, ui.common.KeyMap.Back): ui.activePage = selectionPage