Feat: copy msg to clipboard; empty text to cancel edit; notify
This commit is contained in:
45
main.go
45
main.go
@@ -102,6 +102,12 @@ func main() {
|
|||||||
editArea.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
editArea.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||||
if event.Key() == tcell.KeyEscape && editMode {
|
if event.Key() == tcell.KeyEscape && editMode {
|
||||||
editedMsg := editArea.GetText()
|
editedMsg := editArea.GetText()
|
||||||
|
if editedMsg == "" {
|
||||||
|
notifyUser("edit", "no edit provided")
|
||||||
|
pages.RemovePage("editArea")
|
||||||
|
editMode = false
|
||||||
|
return nil
|
||||||
|
}
|
||||||
chatBody.Messages[selectedIndex].Content = editedMsg
|
chatBody.Messages[selectedIndex].Content = editedMsg
|
||||||
// change textarea
|
// change textarea
|
||||||
textView.SetText(chatToText(showSystemMsgs))
|
textView.SetText(chatToText(showSystemMsgs))
|
||||||
@@ -120,22 +126,25 @@ func main() {
|
|||||||
return
|
return
|
||||||
})
|
})
|
||||||
indexPickWindow.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
indexPickWindow.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||||
if event.Key() == tcell.KeyEnter {
|
si := indexPickWindow.GetText()
|
||||||
si := indexPickWindow.GetText()
|
selectedIndex, err = strconv.Atoi(si)
|
||||||
selectedIndex, err = strconv.Atoi(si)
|
if err != nil {
|
||||||
if err != nil {
|
logger.Error("failed to convert provided index", "error", err, "si", si)
|
||||||
logger.Error("failed to convert provided index", "error", err, "si", si)
|
}
|
||||||
}
|
if len(chatBody.Messages) <= selectedIndex && selectedIndex < 0 {
|
||||||
if len(chatBody.Messages) <= selectedIndex && selectedIndex < 0 {
|
logger.Warn("chosen index is out of bounds", "index", selectedIndex)
|
||||||
logger.Warn("chosen index is out of bounds", "index", selectedIndex)
|
return nil
|
||||||
return nil
|
}
|
||||||
}
|
m := chatBody.Messages[selectedIndex]
|
||||||
|
if editMode && event.Key() == tcell.KeyEnter {
|
||||||
pages.AddPage("editArea", editArea, true, true)
|
pages.AddPage("editArea", editArea, true, true)
|
||||||
m := chatBody.Messages[selectedIndex]
|
|
||||||
// editArea.SetText(m.ToText(selectedIndex), true)
|
|
||||||
editArea.SetText(m.Content, 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
|
return event
|
||||||
})
|
})
|
||||||
@@ -172,8 +181,8 @@ func main() {
|
|||||||
}
|
}
|
||||||
if event.Key() == tcell.KeyF4 {
|
if event.Key() == tcell.KeyF4 {
|
||||||
// edit msg
|
// edit msg
|
||||||
pages.AddPage("getIndex", indexPickWindow, true, true)
|
|
||||||
editMode = true
|
editMode = true
|
||||||
|
pages.AddPage("getIndex", indexPickWindow, true, true)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if event.Key() == tcell.KeyF5 {
|
if event.Key() == tcell.KeyF5 {
|
||||||
@@ -186,6 +195,12 @@ func main() {
|
|||||||
botRespMode = false
|
botRespMode = false
|
||||||
return nil
|
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
|
// cannot send msg in editMode or botRespMode
|
||||||
if event.Key() == tcell.KeyEscape && !editMode && !botRespMode {
|
if event.Key() == tcell.KeyEscape && !editMode && !botRespMode {
|
||||||
fromRow, fromColumn, _, _ := textArea.GetCursor()
|
fromRow, fromColumn, _, _ := textArea.GetCursor()
|
||||||
|
|||||||
16
session.go
16
session.go
@@ -4,6 +4,8 @@ import (
|
|||||||
"elefant/models"
|
"elefant/models"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -90,3 +92,17 @@ func loadOldChatOrGetNew() []models.MessagesStory {
|
|||||||
}
|
}
|
||||||
return history
|
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()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user