diff --git a/internal/ui/chat/guilds_tree.go b/internal/ui/chat/guilds_tree.go index f0e7547..f3e965e 100644 --- a/internal/ui/chat/guilds_tree.go +++ b/internal/ui/chat/guilds_tree.go @@ -418,8 +418,7 @@ func (gt *guildsTree) HandleEvent(event tcell.Event) tview.Command { case keybind.Matches(event, gt.cfg.Keybinds.GuildsTree.SelectCurrent.Keybind): return handler(tcell.NewEventKey(tcell.KeyEnter, "", tcell.ModNone)) case keybind.Matches(event, gt.cfg.Keybinds.GuildsTree.YankID.Keybind): - gt.yankID() - return nil + return gt.yankID() } // Do not fall through to TreeView defaults for unmatched keys. return nil @@ -427,21 +426,23 @@ func (gt *guildsTree) HandleEvent(event tcell.Event) tview.Command { return gt.TreeView.HandleEvent(event) } -func (gt *guildsTree) yankID() { +func (gt *guildsTree) yankID() tview.Command { node := gt.GetCurrentNode() if node == nil { - return + return nil } // Reference of a tree node in the guilds tree is its ID. // discord.Snowflake (discord.GuildID and discord.ChannelID) have the String method. if id, ok := node.GetReference().(fmt.Stringer); ok { - go func() { + return func() tcell.Event { if err := clipboard.Write(clipboard.FmtText, []byte(id.String())); err != nil { slog.Error("failed to copy node id", "err", err) } - }() + return nil + } } + return nil } func (gt *guildsTree) findNodeByReference(reference any) *tview.TreeNode { diff --git a/internal/ui/chat/messages_list.go b/internal/ui/chat/messages_list.go index 4bbb8ec..a61a276 100644 --- a/internal/ui/chat/messages_list.go +++ b/internal/ui/chat/messages_list.go @@ -872,14 +872,11 @@ func (ml *messagesList) HandleEvent(event tcell.Event) tview.Command { ml.selectReply() return nil case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankID.Keybind): - ml.yankID() - return nil + return ml.yankMessageID() case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankContent.Keybind): - ml.yankContent() - return nil + return ml.yankContent() case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankURL.Keybind): - ml.yankURL() - return nil + return ml.yankURL() case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.Open.Keybind): ml.open() return nil @@ -1014,46 +1011,49 @@ func (ml *messagesList) prependOlderMessages() int { return len(messages) } -func (ml *messagesList) yankID() { +func (ml *messagesList) yankMessageID() tview.Command { msg, err := ml.selectedMessage() if err != nil { slog.Error("failed to get selected message", "err", err) - return + return nil } - go func() { + return func() tcell.Event { if err := clipboard.Write(clipboard.FmtText, []byte(msg.ID.String())); err != nil { slog.Error("failed to copy message id", "err", err) } - }() + return nil + } } -func (ml *messagesList) yankContent() { +func (ml *messagesList) yankContent() tview.Command { msg, err := ml.selectedMessage() if err != nil { slog.Error("failed to get selected message", "err", err) - return + return nil } - go func() { + return func() tcell.Event { if err := clipboard.Write(clipboard.FmtText, []byte(msg.Content)); err != nil { slog.Error("failed to copy message content", "err", err) } - }() + return nil + } } -func (ml *messagesList) yankURL() { +func (ml *messagesList) yankURL() tview.Command { msg, err := ml.selectedMessage() if err != nil { slog.Error("failed to get selected message", "err", err) - return + return nil } - go func() { + return func() tcell.Event { if err := clipboard.Write(clipboard.FmtText, []byte(msg.URL())); err != nil { slog.Error("failed to copy message url", "err", err) } - }() + return nil + } } func (ml *messagesList) open() {