summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2025-12-09 15:28:48 +0300
committerGrail Finder <wohilas@gmail.com>2025-12-09 15:28:48 +0300
commit1cd8317f5186634d2e28bd827f113788714f1999 (patch)
tree1ba01b7d028adf8d8baab95010aae487579ef578
parente1bac8d0646ab9e6eab976dac0199807cb79a09e (diff)
Feat: edit role alt+4
-rw-r--r--main.go1
-rw-r--r--tui.go46
2 files changed, 44 insertions, 3 deletions
diff --git a/main.go b/main.go
index baa783d..06575b0 100644
--- a/main.go
+++ b/main.go
@@ -11,6 +11,7 @@ import (
var (
botRespMode = false
editMode = false
+ roleEditMode = false
injectRole = true
selectedIndex = int(-1)
currentAPIIndex = 0 // Index to track current API in ApiLinks slice
diff --git a/tui.go b/tui.go
index 04d20bd..9eab7e0 100644
--- a/tui.go
+++ b/tui.go
@@ -30,11 +30,13 @@ var (
defaultImage = "sysprompts/llama.png"
indexPickWindow *tview.InputField
renameWindow *tview.InputField
+ roleEditWindow *tview.InputField
fullscreenMode bool
// pages
historyPage = "historyPage"
agentPage = "agentPage"
editMsgPage = "editMsgPage"
+ roleEditPage = "roleEditPage"
indexPage = "indexPage"
helpPage = "helpPage"
renamePage = "renamePage"
@@ -57,6 +59,7 @@ var (
[yellow]F2[white]: regen last
[yellow]F3[white]: delete last msg
[yellow]F4[white]: edit msg
+[yellow]Alt+4[white]: edit msg role
[yellow]F5[white]: toggle fullscreen for input/chat window
[yellow]F6[white]: interrupt bot resp
[yellow]F7[white]: copy last msg to clipboard (linux xclip)
@@ -555,6 +558,30 @@ func init() {
// colorText()
// updateStatusLine()
})
+
+ roleEditWindow = tview.NewInputField().
+ SetLabel("Enter new role: ").
+ SetPlaceholder("e.g., user, assistant, system, tool").
+ SetDoneFunc(func(key tcell.Key) {
+ if key == tcell.KeyEnter {
+ newRole := roleEditWindow.GetText()
+ if newRole == "" {
+ if err := notifyUser("edit", "no role provided"); err != nil {
+ logger.Error("failed to send notification", "error", err)
+ }
+ pages.RemovePage(roleEditPage)
+ return
+ }
+ if selectedIndex >= 0 && selectedIndex < len(chatBody.Messages) {
+ chatBody.Messages[selectedIndex].Role = newRole
+ textView.SetText(chatToText(cfg.ShowSys))
+ colorText()
+ pages.RemovePage(roleEditPage)
+ }
+ } else if key == tcell.KeyEscape {
+ pages.RemovePage(roleEditPage)
+ }
+ })
indexPickWindow.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeyBackspace:
@@ -591,12 +618,17 @@ func init() {
return nil
}
m := chatBody.Messages[selectedIndex]
- if editMode {
+ if roleEditMode {
+ hideIndexBar() // Hide overlay first
+ // Set the current role as the default text in the input field
+ roleEditWindow.SetText(m.Role)
+ pages.AddPage(roleEditPage, roleEditWindow, true, true)
+ roleEditMode = false // Reset the flag
+ } else if editMode {
hideIndexBar() // Hide overlay first
pages.AddPage(editMsgPage, editArea, true, true)
editArea.SetText(m.Content, true)
- }
- if !editMode {
+ } else {
if err := copyToClipboard(m.Content); err != nil {
logger.Error("failed to copy to clipboard", "error", err)
}
@@ -787,6 +819,14 @@ func init() {
showIndexBar()
return nil
}
+ if event.Key() == tcell.KeyRune && event.Modifiers() == tcell.ModAlt && event.Rune() == '4' {
+ // edit msg role - show index input as overlay at top
+ editMode = false // Reset edit mode to false to handle role editing
+ showIndexBar()
+ // Set a flag to indicate we're in role edit mode
+ roleEditMode = true
+ return nil
+ }
if event.Key() == tcell.KeyF5 {
// toggle fullscreen
fullscreenMode = !fullscreenMode