A utility for manipulating the terminal cursor. Current feature set:
- Get terminal cursor position
- Move cursor
- Move up, down n-lines
- Clear line
- Clear Screen (up, down, all)
- Set Color
Basic Example usage (see below for an inline-progress bar):
package main import ( "fmt" "log" "github.com/sethgrid/curse" ) func main() { c, err := curse.New() if err != nil { log.Fatal(err) } c.SetColorBold(curse.RED).SetBackgroundColor(curse.BLACK) fmt.Println("Position: ", c.Position) c.SetDefaultStyle() fmt.Println("something to be erased") c.MoveUp(1).EraseCurrentLine().MoveDown(1) }Progress Bar Example:
package main import ( "fmt" "strings" "time" "github.com/sethgrid/curse" ) func main() { fmt.Println("Progress Bar") total := 150 progressBarWidth := 80 c, _ := curse.New() // give some buffer space on the terminal fmt.Println() // display a progress bar for i := 0; i <= total; i++ { c.MoveUp(1) c.EraseCurrentLine() fmt.Printf("%d/%d ", i, total) c.MoveDown(1) c.EraseCurrentLine() fmt.Printf("%s", progressBar(i, total, progressBarWidth)) time.Sleep(time.Millisecond * 25) } // end the previous last line of output fmt.Println() fmt.Println("Complete") } func progressBar(progress, total, width int) string { bar := make([]string, width) for i, _ := range bar { if float32(progress)/float32(total) > float32(i)/float32(width) { bar[i] = "*" } else { bar[i] = " " } } return "[" + strings.Join(bar, "") + "]" }