From 619155433339185052ef86aa00c3936c0cf6d03e Mon Sep 17 00:00:00 2001 From: c-bata Date: Fri, 14 Jul 2017 10:50:35 +0900 Subject: [PATCH] Update main.go --- main.go | 76 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/main.go b/main.go index accfb5a..5c211c7 100644 --- a/main.go +++ b/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}) } +func scroll(out *prompt.VT100Writer, lines int) { + for i := 0; i < lines; i++ { + out.ScrollDown() + defer out.ScrollUp() + } + return +} + func main() { in := prompt.NewVT100Parser() - out := prompt.NewVT100Writer() in.Setup() defer in.TearDown() defer fmt.Println("\nexited!") + out := prompt.NewVT100Writer() out.SetTitle("はろー") - - out.ScrollDown() - out.ScrollDown() - out.ScrollDown() - out.ScrollDown() - out.ScrollUp() - out.ScrollUp() - out.ScrollUp() - out.ScrollUp() + scroll(out, 7) out.Flush() bufCh := make(chan []byte, 128) @@ -41,29 +41,46 @@ func main() { out.WriteRaw(b) buffer.InsertText(string(b), false, true) } 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 { l := buffer.CursorLeft(1) if l == 0 { continue } - out.CursorDown(1) - out.CursorBackward(1) + out.EraseLine() out.EraseDown() - out.CursorUp(1) + after := buffer.Document().CurrentLine() + out.WriteStr(after) + out.CursorBackward(len(after) - buffer.CursorPosition) } else if ac.Key == prompt.Right { l := buffer.CursorRight(1) if l == 0 { continue } - out.CursorDown(1) + + out.CursorForward(l) + out.WriteRaw(b) out.EraseDown() - out.CursorForward(1) - out.CursorUp(1) + after := buffer.Document().TextAfterCursor() + out.WriteStr(after) } else if ac.Key == prompt.Backspace { - buffer.DeleteBeforeCursor(1) + deleted := buffer.DeleteBeforeCursor(1) + if deleted == "" { + continue + } out.CursorBackward(1) 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 { buffer.CursorRight(1) } else if ac.Key == prompt.ControlT { @@ -73,6 +90,7 @@ func main() { out.ClearTitle() out.Flush() return + } else if ac.Key == prompt.Up || ac.Key == prompt.Down { } else { out.WriteRaw(b) //buffer.InsertText(ac.Key.String(), false, true) @@ -83,30 +101,38 @@ func main() { out.SetColor("white", "teal") out.CursorDown(1) - out.Write([]byte(" Foo ")) + out.Write([]byte(" select ")) out.SetColor("white", "darkGray") out.Write([]byte(" ")) out.SetColor("white", "teal") - out.CursorBackward(len("foo") + 3) + out.CursorBackward(len("select") + 3) out.CursorDown(1) - out.Write([]byte(" Hello ")) + out.Write([]byte(" insert ")) out.SetColor("white", "darkGray") out.Write([]byte(" ")) out.SetColor("white", "teal") - out.CursorBackward(len("Hello") + 3) + out.CursorBackward(len("insert") + 3) out.CursorDown(1) - out.Write([]byte(" World ")) + out.Write([]byte(" update ")) out.SetColor("white", "darkGray") out.Write([]byte(" ")) 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") } + scroll(out, 4) out.Flush() } }