Update main.go
This commit is contained in:
parent
7c7813e5e1
commit
6191554333
76
main.go
76
main.go
@ -11,22 +11,22 @@ func enterAlternateScreen(fd int) {
|
|||||||
syscall.Write(fd, []byte{0x1b, 0x5b, 0x3f, 0x01, 0x00, 0x04, 0x09, 0x68, 0x1b, 0x5b, 0x48})
|
syscall.Write(fd, []byte{0x1b, 0x5b, 0x3f, 0x01, 0x00, 0x04, 0x09, 0x68, 0x1b, 0x5b, 0x48})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func scroll(out *prompt.VT100Writer, lines int) {
|
||||||
|
for i := 0; i < lines; i++ {
|
||||||
|
out.ScrollDown()
|
||||||
|
defer out.ScrollUp()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
in := prompt.NewVT100Parser()
|
in := prompt.NewVT100Parser()
|
||||||
out := prompt.NewVT100Writer()
|
|
||||||
in.Setup()
|
in.Setup()
|
||||||
defer in.TearDown()
|
defer in.TearDown()
|
||||||
defer fmt.Println("\nexited!")
|
defer fmt.Println("\nexited!")
|
||||||
|
out := prompt.NewVT100Writer()
|
||||||
out.SetTitle("はろー")
|
out.SetTitle("はろー")
|
||||||
|
scroll(out, 7)
|
||||||
out.ScrollDown()
|
|
||||||
out.ScrollDown()
|
|
||||||
out.ScrollDown()
|
|
||||||
out.ScrollDown()
|
|
||||||
out.ScrollUp()
|
|
||||||
out.ScrollUp()
|
|
||||||
out.ScrollUp()
|
|
||||||
out.ScrollUp()
|
|
||||||
out.Flush()
|
out.Flush()
|
||||||
|
|
||||||
bufCh := make(chan []byte, 128)
|
bufCh := make(chan []byte, 128)
|
||||||
@ -41,29 +41,46 @@ func main() {
|
|||||||
out.WriteRaw(b)
|
out.WriteRaw(b)
|
||||||
buffer.InsertText(string(b), false, true)
|
buffer.InsertText(string(b), false, true)
|
||||||
} else if ac.Key == prompt.Enter || ac.Key == prompt.ControlJ {
|
} else if ac.Key == prompt.Enter || ac.Key == prompt.ControlJ {
|
||||||
buffer.InsertText("\n", false, true)
|
out.EraseDown()
|
||||||
|
out.WriteStr(buffer.Document().TextAfterCursor())
|
||||||
|
|
||||||
|
out.WriteStr("\n>>> Your input: '")
|
||||||
|
out.WriteStr(buffer.Text())
|
||||||
|
out.WriteStr("' <<<\n")
|
||||||
|
buffer = prompt.NewBuffer()
|
||||||
} else if ac.Key == prompt.Left {
|
} else if ac.Key == prompt.Left {
|
||||||
l := buffer.CursorLeft(1)
|
l := buffer.CursorLeft(1)
|
||||||
if l == 0 {
|
if l == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
out.CursorDown(1)
|
out.EraseLine()
|
||||||
out.CursorBackward(1)
|
|
||||||
out.EraseDown()
|
out.EraseDown()
|
||||||
out.CursorUp(1)
|
after := buffer.Document().CurrentLine()
|
||||||
|
out.WriteStr(after)
|
||||||
|
out.CursorBackward(len(after) - buffer.CursorPosition)
|
||||||
} else if ac.Key == prompt.Right {
|
} else if ac.Key == prompt.Right {
|
||||||
l := buffer.CursorRight(1)
|
l := buffer.CursorRight(1)
|
||||||
if l == 0 {
|
if l == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
out.CursorDown(1)
|
|
||||||
|
out.CursorForward(l)
|
||||||
|
out.WriteRaw(b)
|
||||||
out.EraseDown()
|
out.EraseDown()
|
||||||
out.CursorForward(1)
|
after := buffer.Document().TextAfterCursor()
|
||||||
out.CursorUp(1)
|
out.WriteStr(after)
|
||||||
} else if ac.Key == prompt.Backspace {
|
} else if ac.Key == prompt.Backspace {
|
||||||
buffer.DeleteBeforeCursor(1)
|
deleted := buffer.DeleteBeforeCursor(1)
|
||||||
|
if deleted == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
out.CursorBackward(1)
|
out.CursorBackward(1)
|
||||||
out.EraseDown()
|
out.EraseDown()
|
||||||
|
|
||||||
|
after := buffer.Document().TextAfterCursor()
|
||||||
|
out.WriteStr(after)
|
||||||
|
} else if ac.Key == prompt.Tab || ac.Key == prompt.ControlI {
|
||||||
|
} else if ac.Key == prompt.BackTab {
|
||||||
} else if ac.Key == prompt.Right {
|
} else if ac.Key == prompt.Right {
|
||||||
buffer.CursorRight(1)
|
buffer.CursorRight(1)
|
||||||
} else if ac.Key == prompt.ControlT {
|
} else if ac.Key == prompt.ControlT {
|
||||||
@ -73,6 +90,7 @@ func main() {
|
|||||||
out.ClearTitle()
|
out.ClearTitle()
|
||||||
out.Flush()
|
out.Flush()
|
||||||
return
|
return
|
||||||
|
} else if ac.Key == prompt.Up || ac.Key == prompt.Down {
|
||||||
} else {
|
} else {
|
||||||
out.WriteRaw(b)
|
out.WriteRaw(b)
|
||||||
//buffer.InsertText(ac.Key.String(), false, true)
|
//buffer.InsertText(ac.Key.String(), false, true)
|
||||||
@ -83,30 +101,38 @@ func main() {
|
|||||||
out.SetColor("white", "teal")
|
out.SetColor("white", "teal")
|
||||||
|
|
||||||
out.CursorDown(1)
|
out.CursorDown(1)
|
||||||
out.Write([]byte(" Foo "))
|
out.Write([]byte(" select "))
|
||||||
out.SetColor("white", "darkGray")
|
out.SetColor("white", "darkGray")
|
||||||
out.Write([]byte(" "))
|
out.Write([]byte(" "))
|
||||||
out.SetColor("white", "teal")
|
out.SetColor("white", "teal")
|
||||||
out.CursorBackward(len("foo") + 3)
|
out.CursorBackward(len("select") + 3)
|
||||||
|
|
||||||
out.CursorDown(1)
|
out.CursorDown(1)
|
||||||
out.Write([]byte(" Hello "))
|
out.Write([]byte(" insert "))
|
||||||
out.SetColor("white", "darkGray")
|
out.SetColor("white", "darkGray")
|
||||||
out.Write([]byte(" "))
|
out.Write([]byte(" "))
|
||||||
out.SetColor("white", "teal")
|
out.SetColor("white", "teal")
|
||||||
out.CursorBackward(len("Hello") + 3)
|
out.CursorBackward(len("insert") + 3)
|
||||||
|
|
||||||
out.CursorDown(1)
|
out.CursorDown(1)
|
||||||
out.Write([]byte(" World "))
|
out.Write([]byte(" update "))
|
||||||
out.SetColor("white", "darkGray")
|
out.SetColor("white", "darkGray")
|
||||||
out.Write([]byte(" "))
|
out.Write([]byte(" "))
|
||||||
out.SetColor("white", "teal")
|
out.SetColor("white", "teal")
|
||||||
out.CursorBackward(len("World") + 3)
|
out.CursorBackward(len("update") + 3)
|
||||||
|
|
||||||
out.CursorUp(3)
|
out.CursorDown(1)
|
||||||
|
out.Write([]byte(" where "))
|
||||||
|
out.SetColor("white", "darkGray")
|
||||||
|
out.Write([]byte(" "))
|
||||||
|
out.SetColor("white", "teal")
|
||||||
|
out.CursorBackward(len("where ") + 3)
|
||||||
|
|
||||||
|
out.CursorUp(4)
|
||||||
out.SetColor("default", "default")
|
out.SetColor("default", "default")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scroll(out, 4)
|
||||||
out.Flush()
|
out.Flush()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user