Detailed changes
@@ -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()
@@ -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,
+ )),
+ ),
)
}
@@ -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,
+ ),
),
),
)
@@ -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),
+ ),
+ )
}
@@ -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()),
+ ),
+ )
}
@@ -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