Feat: copy msg to clipboard; empty text to cancel edit; notify

This commit is contained in:
Grail Finder
2024-11-20 08:55:56 +03:00
parent aaf0566636
commit 74669b58fe
2 changed files with 46 additions and 15 deletions

27
main.go
View File

@@ -102,6 +102,12 @@ func main() {
editArea.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyEscape && editMode {
editedMsg := editArea.GetText()
if editedMsg == "" {
notifyUser("edit", "no edit provided")
pages.RemovePage("editArea")
editMode = false
return nil
}
chatBody.Messages[selectedIndex].Content = editedMsg
// change textarea
textView.SetText(chatToText(showSystemMsgs))
@@ -120,7 +126,6 @@ func main() {
return
})
indexPickWindow.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyEnter {
si := indexPickWindow.GetText()
selectedIndex, err = strconv.Atoi(si)
if err != nil {
@@ -130,12 +135,16 @@ func main() {
logger.Warn("chosen index is out of bounds", "index", selectedIndex)
return nil
}
pages.AddPage("editArea", editArea, true, true)
m := chatBody.Messages[selectedIndex]
// editArea.SetText(m.ToText(selectedIndex), true)
if editMode && event.Key() == tcell.KeyEnter {
pages.AddPage("editArea", editArea, true, true)
editArea.SetText(m.Content, true)
editMode = true
// editArea.SetText(si, true)
}
if !editMode && event.Key() == tcell.KeyEnter {
// TODO: add notification that text was copied
copyToClipboard(m.Content)
notification := fmt.Sprintf("msg '%s' was copied to the clipboard", m.Content[:30])
notifyUser("copied", notification)
}
return event
})
@@ -172,8 +181,8 @@ func main() {
}
if event.Key() == tcell.KeyF4 {
// edit msg
pages.AddPage("getIndex", indexPickWindow, true, true)
editMode = true
pages.AddPage("getIndex", indexPickWindow, true, true)
return nil
}
if event.Key() == tcell.KeyF5 {
@@ -186,6 +195,12 @@ func main() {
botRespMode = false
return nil
}
if event.Key() == tcell.KeyF7 {
// copy msg to clipboard
editMode = false
pages.AddPage("getIndex", indexPickWindow, true, true)
return nil
}
// cannot send msg in editMode or botRespMode
if event.Key() == tcell.KeyEscape && !editMode && !botRespMode {
fromRow, fromColumn, _, _ := textArea.GetCursor()

View File

@@ -4,6 +4,8 @@ import (
"elefant/models"
"encoding/json"
"fmt"
"os/exec"
"strings"
"time"
)
@@ -90,3 +92,17 @@ func loadOldChatOrGetNew() []models.MessagesStory {
}
return history
}
func copyToClipboard(text string) error {
cmd := exec.Command("xclip", "-selection", "clipboard")
cmd.Stdin = nil
cmd.Stdout = nil
cmd.Stderr = nil
cmd.Stdin = strings.NewReader(text)
return cmd.Run()
}
func notifyUser(topic, message string) error {
cmd := exec.Command("notify-send", topic, message)
return cmd.Run()
}