Feat: edit role alt+4
This commit is contained in:
1
main.go
1
main.go
@@ -11,6 +11,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
botRespMode = false
|
botRespMode = false
|
||||||
editMode = false
|
editMode = false
|
||||||
|
roleEditMode = false
|
||||||
injectRole = true
|
injectRole = true
|
||||||
selectedIndex = int(-1)
|
selectedIndex = int(-1)
|
||||||
currentAPIIndex = 0 // Index to track current API in ApiLinks slice
|
currentAPIIndex = 0 // Index to track current API in ApiLinks slice
|
||||||
|
|||||||
46
tui.go
46
tui.go
@@ -30,11 +30,13 @@ var (
|
|||||||
defaultImage = "sysprompts/llama.png"
|
defaultImage = "sysprompts/llama.png"
|
||||||
indexPickWindow *tview.InputField
|
indexPickWindow *tview.InputField
|
||||||
renameWindow *tview.InputField
|
renameWindow *tview.InputField
|
||||||
|
roleEditWindow *tview.InputField
|
||||||
fullscreenMode bool
|
fullscreenMode bool
|
||||||
// pages
|
// pages
|
||||||
historyPage = "historyPage"
|
historyPage = "historyPage"
|
||||||
agentPage = "agentPage"
|
agentPage = "agentPage"
|
||||||
editMsgPage = "editMsgPage"
|
editMsgPage = "editMsgPage"
|
||||||
|
roleEditPage = "roleEditPage"
|
||||||
indexPage = "indexPage"
|
indexPage = "indexPage"
|
||||||
helpPage = "helpPage"
|
helpPage = "helpPage"
|
||||||
renamePage = "renamePage"
|
renamePage = "renamePage"
|
||||||
@@ -57,6 +59,7 @@ var (
|
|||||||
[yellow]F2[white]: regen last
|
[yellow]F2[white]: regen last
|
||||||
[yellow]F3[white]: delete last msg
|
[yellow]F3[white]: delete last msg
|
||||||
[yellow]F4[white]: edit msg
|
[yellow]F4[white]: edit msg
|
||||||
|
[yellow]Alt+4[white]: edit msg role
|
||||||
[yellow]F5[white]: toggle fullscreen for input/chat window
|
[yellow]F5[white]: toggle fullscreen for input/chat window
|
||||||
[yellow]F6[white]: interrupt bot resp
|
[yellow]F6[white]: interrupt bot resp
|
||||||
[yellow]F7[white]: copy last msg to clipboard (linux xclip)
|
[yellow]F7[white]: copy last msg to clipboard (linux xclip)
|
||||||
@@ -555,6 +558,30 @@ func init() {
|
|||||||
// colorText()
|
// colorText()
|
||||||
// updateStatusLine()
|
// 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 {
|
indexPickWindow.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||||
switch event.Key() {
|
switch event.Key() {
|
||||||
case tcell.KeyBackspace:
|
case tcell.KeyBackspace:
|
||||||
@@ -591,12 +618,17 @@ func init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
m := chatBody.Messages[selectedIndex]
|
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
|
hideIndexBar() // Hide overlay first
|
||||||
pages.AddPage(editMsgPage, editArea, true, true)
|
pages.AddPage(editMsgPage, editArea, true, true)
|
||||||
editArea.SetText(m.Content, true)
|
editArea.SetText(m.Content, true)
|
||||||
}
|
} else {
|
||||||
if !editMode {
|
|
||||||
if err := copyToClipboard(m.Content); err != nil {
|
if err := copyToClipboard(m.Content); err != nil {
|
||||||
logger.Error("failed to copy to clipboard", "error", err)
|
logger.Error("failed to copy to clipboard", "error", err)
|
||||||
}
|
}
|
||||||
@@ -787,6 +819,14 @@ func init() {
|
|||||||
showIndexBar()
|
showIndexBar()
|
||||||
return nil
|
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 {
|
if event.Key() == tcell.KeyF5 {
|
||||||
// toggle fullscreen
|
// toggle fullscreen
|
||||||
fullscreenMode = !fullscreenMode
|
fullscreenMode = !fullscreenMode
|
||||||
|
|||||||
Reference in New Issue
Block a user