diff options
| author | Grail Finder <wohilas@gmail.com> | 2025-12-09 15:28:48 +0300 |
|---|---|---|
| committer | Grail Finder <wohilas@gmail.com> | 2025-12-09 15:28:48 +0300 |
| commit | 1cd8317f5186634d2e28bd827f113788714f1999 (patch) | |
| tree | 1ba01b7d028adf8d8baab95010aae487579ef578 | |
| parent | e1bac8d0646ab9e6eab976dac0199807cb79a09e (diff) | |
Feat: edit role alt+4
| -rw-r--r-- | main.go | 1 | ||||
| -rw-r--r-- | tui.go | 46 |
2 files changed, 44 insertions, 3 deletions
@@ -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 @@ -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 |
