From 5c6b6f4f0096127053c558fbe9a1b3ec7a82d26d Mon Sep 17 00:00:00 2001 From: xqrs <3bd3bdr@gmail.com> Date: Mon, 16 Jun 2025 21:23:21 +0300 Subject: [PATCH] fix(cmd): call tabComplete only on tab when autocomplete_limit = 0 (#559) Co-authored-by: Ayyan --- cmd/message_input.go | 73 +++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/cmd/message_input.go b/cmd/message_input.go index 916fad2..e89b86b 100644 --- a/cmd/message_input.go +++ b/cmd/message_input.go @@ -106,32 +106,23 @@ func (mi *messageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey { return nil } - if app.pages.GetVisible(app.autocompletePage) && mi.cfg.AutocompleteLimit > 0 { - count := mi.autocomplete.GetItemCount() - cur := mi.autocomplete.GetCurrentItem() - n := event.Name() - switch n { - case mi.cfg.Keys.Autocomplete.Down: - if cur == count-1 { - mi.autocomplete.SetCurrentItem(0) - } else { - mi.autocomplete.SetCurrentItem(cur + 1) - } - return nil - case mi.cfg.Keys.Autocomplete.Up: - if cur == 0 { - mi.autocomplete.SetCurrentItem(count - 1) - } else { - mi.autocomplete.SetCurrentItem(cur - 1) - } - return nil - } - } - if mi.cfg.AutocompleteLimit > 0 { + if app.pages.GetVisible(app.autocompletePage) { + count := mi.autocomplete.GetItemCount() + cur := mi.autocomplete.GetCurrentItem() + switch event.Name() { + case mi.cfg.Keys.Autocomplete.Down: + mi.autocomplete.SetCurrentItem((cur+1) % count) + return nil + case mi.cfg.Keys.Autocomplete.Up: + if cur == 0 { + cur = count + } + mi.autocomplete.SetCurrentItem(cur - 1) + return nil + } + } go app.QueueUpdateDraw(func() { mi.tabComplete(true) }) - } else { - go app.QueueUpdate(func() { mi.tabComplete(true) }) } return event @@ -227,16 +218,35 @@ func (mi *messageInput) tabComplete(isAuto bool) { } pos := posEnd - (len(name) + 1) - if !isAuto && mi.autocomplete.GetItemCount() != 0 { + gID := app.guildsTree.selectedGuildID + cID := app.guildsTree.selectedChannelID + + if !isAuto { + if mi.cfg.AutocompleteLimit == 0 { + mi.searchMember(gID, name) + mems, err := discordState.Cabinet.Members(gID) + if err != nil { + slog.Error("fetching members failed", "err", err) + return + } + res := fuzzy.FindFrom(name, memberList(mems)) + for _, r := range res { + if channelHasUser(cID, mems[r.Index].User.ID) { + mi.Replace(pos, posEnd, "@"+mems[r.Index].User.Username+" ") + return + } + } + return + } + if mi.autocomplete.GetItemCount() == 0 { + return + } _, name = mi.autocomplete.GetItemText(mi.autocomplete.GetCurrentItem()) mi.Replace(pos, posEnd, "@"+name+" ") mi.stopTabCompletion() return } - gID := app.guildsTree.selectedGuildID - cID := app.guildsTree.selectedChannelID - // Special case, show recent messages' authors if name == "" { msgs, err := discordState.Cabinet.Messages(cID) @@ -266,8 +276,7 @@ func (mi *messageInput) tabComplete(isAuto bool) { return } res := fuzzy.FindFrom(name, memberList(mems)) - if mi.cfg.AutocompleteLimit != 0 && - len(res) > int(mi.cfg.AutocompleteLimit) { + if len(res) > int(mi.cfg.AutocompleteLimit) { res = res[:int(mi.cfg.AutocompleteLimit)] } for _, r := range res { @@ -283,10 +292,6 @@ func (mi *messageInput) tabComplete(isAuto bool) { return } - if mi.cfg.AutocompleteLimit == 0 { - return - } - _, col, _, _ := mi.GetCursor() mi.showMentionList(col - 1) }