mirror of https://github.com/jroimartin/gocui.git
Add example stdin.go
This commit is contained in:
parent
708261503b
commit
4c83f5bfa9
|
@ -0,0 +1,113 @@
|
|||
// Copyright 2015 The gocui Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"runtime"
|
||||
|
||||
"github.com/jroimartin/gocui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
runtime.LockOSThread()
|
||||
|
||||
g := gocui.NewGui()
|
||||
if err := g.Init(); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
defer g.Close()
|
||||
|
||||
g.SetLayout(layout)
|
||||
if err := initKeybindings(g); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
g.ShowCursor = true
|
||||
|
||||
err := g.MainLoop()
|
||||
if err != nil && err != gocui.Quit {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
||||
|
||||
func layout(g *gocui.Gui) error {
|
||||
maxX, _ := g.Size()
|
||||
|
||||
if v, err := g.SetView("legend", maxX-23, 0, maxX-1, 5); err != nil {
|
||||
if err != gocui.ErrorUnkView {
|
||||
return err
|
||||
}
|
||||
fmt.Fprintln(v, "KEYBINDINGS")
|
||||
fmt.Fprintln(v, "↑ ↓: Seek input")
|
||||
fmt.Fprintln(v, "A: Enable autoscroll")
|
||||
fmt.Fprintln(v, "^C: Exit")
|
||||
}
|
||||
|
||||
if v, err := g.SetView("stdin", 0, 0, 80, 35); err != nil {
|
||||
if err != gocui.ErrorUnkView {
|
||||
return err
|
||||
}
|
||||
if err := g.SetCurrentView("stdin"); err != nil {
|
||||
return err
|
||||
}
|
||||
dumper := hex.Dumper(v)
|
||||
if _, err := io.Copy(dumper, os.Stdin); err != nil {
|
||||
return err
|
||||
}
|
||||
v.Wrap = true
|
||||
v.Autoscroll = true
|
||||
v.Editable = true
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initKeybindings(g *gocui.Gui) error {
|
||||
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("stdin", 'a', gocui.ModNone, autoscroll); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("stdin", gocui.KeyArrowUp, gocui.ModNone,
|
||||
func(g *gocui.Gui, v *gocui.View) error {
|
||||
scrollView(v, -1)
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("stdin", gocui.KeyArrowDown, gocui.ModNone,
|
||||
func(g *gocui.Gui, v *gocui.View) error {
|
||||
scrollView(v, 1)
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func quit(g *gocui.Gui, v *gocui.View) error {
|
||||
return gocui.Quit
|
||||
}
|
||||
|
||||
func autoscroll(g *gocui.Gui, v *gocui.View) error {
|
||||
v.Autoscroll = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func scrollView(v *gocui.View, dy int) error {
|
||||
if v != nil {
|
||||
v.Autoscroll = false
|
||||
ox, oy := v.Origin()
|
||||
if err := v.SetOrigin(ox, oy+dy); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue