Bläddra i källkod

feat: select selected message's referenced message using keybinding (#87)

* feat: jump to referenced message using keybinding

* Rename JumpToSelectedMessageReference to JumpSelectedMessageReference

* Remove 'to' from toml tag

* Rename JumpSelectedMessageReference to SelectMessageReference
ayntgl 4 år sedan
förälder
incheckning
cc45f6b6bf
3 ändrade filer med 24 tillägg och 7 borttagningar
  1. 2 0
      config.go
  2. 18 3
      ui.go
  3. 4 4
      util.go

+ 2 - 0
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
 

+ 18 - 3
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

+ 4 - 4
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) {