on main help sign in
chore: fix completions
0770b12Kujtim Hoxha
internal/tui/components/completions/completions.go+5−9
@@ -140,7 +140,7 @@ func (c *completionsCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
140 selectedItem := *s
140 selectedItem := *s
141 c.list.SetSelected(selectedItem.ID())
141 c.list.SetSelected(selectedItem.ID())
142 return c, util.CmdHandler(SelectCompletionMsg{
142 return c, util.CmdHandler(SelectCompletionMsg{
143− Value: selectedItem,
143+ Value: selectedItem.Value(),
144 Insert: true,
144 Insert: true,
145 })
145 })
146 case key.Matches(msg, c.keyMap.DownInsert):
146 case key.Matches(msg, c.keyMap.DownInsert):
@@ -151,7 +151,7 @@ func (c *completionsCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
151 selectedItem := *s
151 selectedItem := *s
152 c.list.SetSelected(selectedItem.ID())
152 c.list.SetSelected(selectedItem.ID())
153 return c, util.CmdHandler(SelectCompletionMsg{
153 return c, util.CmdHandler(SelectCompletionMsg{
154− Value: selectedItem,
154+ Value: selectedItem.Value(),
155 Insert: true,
155 Insert: true,
156 })
156 })
157 case key.Matches(msg, c.keyMap.Select):
157 case key.Matches(msg, c.keyMap.Select):
@@ -162,7 +162,7 @@ func (c *completionsCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
162 selectedItem := *s
162 selectedItem := *s
163 c.open = false // Close completions after selection
163 c.open = false // Close completions after selection
164 return c, util.CmdHandler(SelectCompletionMsg{
164 return c, util.CmdHandler(SelectCompletionMsg{
165− Value: selectedItem,
165+ Value: selectedItem.Value(),
166 })
166 })
167 case key.Matches(msg, c.keyMap.Cancel):
167 case key.Matches(msg, c.keyMap.Cancel):
168 return c, util.CmdHandler(CloseCompletionsMsg{})
168 return c, util.CmdHandler(CloseCompletionsMsg{})
@@ -272,18 +272,14 @@ func (c *completionsCmp) View() string {
272// listWidth returns the width of the last 10 items in the list, which is used
272// listWidth returns the width of the last 10 items in the list, which is used
273// to determine the width of the completions popup.
273// to determine the width of the completions popup.
274// Note this only works for [completionItemCmp] items.
274// Note this only works for [completionItemCmp] items.
275−func listWidth[T any](items []T) int {
275+func listWidth(items []list.CompletionItem[any]) int {
276 var width int
276 var width int
277 if len(items) == 0 {
277 if len(items) == 0 {
278 return width
278 return width
279 }
279 }
280
280
281 for i := len(items) - 1; i >= 0 && i >= len(items)-10; i-- {
281 for i := len(items) - 1; i >= 0 && i >= len(items)-10; i-- {
282− item, ok := any(items[i]).(*completionItemCmp)
282+ itemWidth := lipgloss.Width(items[i].Text()) + 2 // +2 for padding
283− if !ok {
284− continue
285− }
286− itemWidth := lipgloss.Width(item.text) + 2 // +2 for padding
287 width = max(width, itemWidth)
283 width = max(width, itemWidth)
288 }
284 }
289
285
internal/tui/exp/list/items.go+5
@@ -23,6 +23,7 @@ type CompletionItem[T any] interface {
23 layout.Sizeable
23 layout.Sizeable
24 HasMatchIndexes
24 HasMatchIndexes
25 Value() T
25 Value() T
26+ Text() string
26}
27}
27
28
28type completionItemCmp[T any] struct {
29type completionItemCmp[T any] struct {
@@ -312,6 +313,10 @@ func (c *completionItemCmp[T]) ID() string {
312 return c.id
313 return c.id
313}
314}
314
315
316+func (c *completionItemCmp[T]) Text() string {
317+ return c.text
318+}
319+
315type ItemSection interface {
320type ItemSection interface {
316 Item
321 Item
317 layout.Sizeable
322 layout.Sizeable