-
Notifications
You must be signed in to change notification settings - Fork 241
Open
Labels
Description
Parameter inputs don't allow for natural text editing, ex.
I think this is what #162 was trying to achieve.
Ctrl+Left or Cmd+Left to jump to start of line
Ctrl+Backspace or Cmd+Backspace to clear all (useful when we have a default value we want to clear)
...
gocui seems to support defining a custom editor, we should add support for that. Some boilerplate code from komanda:
ui.Editor = gocui.EditorFunc(simpleEditor)
g.SetManagerFunc(ui.Layout)func simpleEditor(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) {
var tab = false
var inHistroy = false
switch {
case key == gocui.KeyTab:
tab = true
case ch != 0 && mod == 0:
v.EditWrite(ch)
case key == gocui.KeySpace:
v.EditWrite(' ')
case key == gocui.KeyBackspace || key == gocui.KeyBackspace2:
v.EditDelete(true)
case key == gocui.KeyDelete:
v.EditDelete(false)
case key == gocui.KeyInsert:
v.Overwrite = !v.Overwrite
case key == gocui.KeyEnter:
if line := v.ViewBuffer(); len(line) > 0 {
GetLine(Server.Gui, v)
} else {
if c, err := Server.Gui.View(Server.CurrentChannel); err == nil {
c.Autoscroll = true
}
}
InputHistory.Current()
// v.EditNewLine()
// v.Rewind()
// case key == gocui.MouseMiddle:
// nextView(Server.Gui, v)
// case key == gocui.MouseRight:
case key == gocui.KeyArrowDown:
inHistroy = true
if line := InputHistory.Next(); len(line) > 0 {
v.Clear()
v.SetCursor(0, 0)
v.SetOrigin(0, 0)
fmt.Fprint(v, line)
v.SetCursor(len(v.Buffer())-1, 0)
}
case key == gocui.KeyArrowUp:
inHistroy = true
if line := InputHistory.Prev(); len(line) > 0 {
v.Clear()
v.SetCursor(0, 0)
v.SetOrigin(0, 0)
fmt.Fprint(v, line)
v.SetCursor(len(v.Buffer())-1, 0)
}
case key == gocui.KeyArrowLeft:
v.MoveCursor(-1, 0, false)
case key == gocui.KeyArrowRight:
cx, _ := v.Cursor()
line := v.ViewBuffer()
// logger.Logger.Println(len(line), cx)
// logger.Logger.Println(spew.Sdump(line))
// if cx == 0 {
// v.MoveCursor(-1, 0, false)
if cx < len(line)-1 {
v.MoveCursor(1, 0, false)
}
case key == gocui.KeyCtrlA:
v.SetCursor(0, 0)
v.SetOrigin(0, 0)
case key == gocui.KeyCtrlK:
v.Clear()
v.SetCursor(0, 0)
v.SetOrigin(0, 0)
case key == gocui.KeyCtrlE:
v.SetCursor(len(v.Buffer())-1, 0)
case key == gocui.KeyCtrlLsqBracket:
// logger.Logger.Println("word...")
}
if !inHistroy {
// InputHistory.Current()
}
if !tab {
// logger.Logger.Print("CALL\n")
inCacheTab = false
cacheTabSearch = ""
cacheTabResults = []string{}
}
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Projects
Status
Todo