diff --git a/config.go b/config.go index 2dd837c..e7828ba 100644 --- a/config.go +++ b/config.go @@ -21,6 +21,7 @@ type keybindings struct { SelectNextMessage string `toml:"select_next_message"` SelectFirstMessage string `toml:"select_first_message"` SelectLastMessage string `toml:"select_last_message"` + SelectMessageReference string `toml:"select_message_reference"` ReplySelectedMessage string `toml:"reply_selected_message"` MentionReplySelectedMessage string `toml:"mention_reply_selected_message"` CopySelectedMessage string `toml:"copy_selected_message"` @@ -109,6 +110,7 @@ func loadConfig() *config { ReplySelectedMessage: "Rune[r]", MentionReplySelectedMessage: "Rune[R]", CopySelectedMessage: "Rune[c]", + SelectMessageReference: "Rune[m]", } c.Borders = tview.Borders diff --git a/ui.go b/ui.go index 87f90be..364478f 100644 --- a/ui.go +++ b/ui.go @@ -178,13 +178,28 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey { Highlight(ms[selectedMessage].ID). ScrollToHighlight() return nil + case conf.Keybindings.SelectMessageReference: + hs := messagesView.GetHighlights() + if len(hs) == 0 { + return nil + } + + _, m := findByMessageID(hs[0]) + if m.ReferencedMessage != nil { + selectedMessage, _ = findByMessageID(m.ReferencedMessage.ID) + messagesView. + Highlight(m.ReferencedMessage.ID). + ScrollToHighlight() + } + + return nil case conf.Keybindings.ReplySelectedMessage: hs := messagesView.GetHighlights() if len(hs) == 0 { return nil } - m := findByMessageID(hs[0]) + _, m := findByMessageID(hs[0]) messageInputField.SetTitle("Replying to " + m.Author.String()) app.SetFocus(messageInputField) return nil @@ -194,7 +209,7 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey { return nil } - m := findByMessageID(hs[0]) + _, m := findByMessageID(hs[0]) messageInputField.SetTitle("[@] Replying to " + m.Author.String()) app.SetFocus(messageInputField) return nil @@ -204,7 +219,7 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey { return nil } - m := findByMessageID(hs[0]) + _, m := findByMessageID(hs[0]) err := clipboard.WriteAll(m.Content) if err != nil { return nil diff --git a/util.go b/util.go index 94da705..d26778a 100644 --- a/util.go +++ b/util.go @@ -27,14 +27,14 @@ func generateChannelRepr(c *discordgo.Channel) string { return repr } -func findByMessageID(mID string) *discordgo.Message { - for _, m := range selectedChannel.Messages { +func findByMessageID(mID string) (int, *discordgo.Message) { + for i, m := range selectedChannel.Messages { if m.ID == mID { - return m + return i, m } } - return nil + return -1, nil } func createPrivateChannels(n *tview.TreeNode) {