DEMO: add some interesting terminal window examples
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
965cc65c86
commit
b030929825
|
@ -4,3 +4,8 @@ test3/test3
|
||||||
test4/test4
|
test4/test4
|
||||||
test5/test5
|
test5/test5
|
||||||
example-systray/example-systray
|
example-systray/example-systray
|
||||||
|
example-multiple-windows/example-multiple-windows
|
||||||
|
example-splash/example-splash
|
||||||
|
example-ssh/ssh-client
|
||||||
|
example-ssh/ssh-ed25519
|
||||||
|
example-ssh/with-passwd
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
// Copyright 2014 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 (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/awesome-gocui/gocui"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
viewArr = []string{"v1", "v2", "v3", "v4"}
|
||||||
|
active = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
func setCurrentViewOnTop(g *gocui.Gui, name string) (*gocui.View, error) {
|
||||||
|
if _, err := g.SetCurrentView(name); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return g.SetViewOnTop(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func nextView(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
nextIndex := (active + 1) % len(viewArr)
|
||||||
|
name := viewArr[nextIndex]
|
||||||
|
|
||||||
|
out, err := g.View("v2")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(out, "Going from view "+v.Name()+" to "+name)
|
||||||
|
|
||||||
|
if _, err := setCurrentViewOnTop(g, name); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if nextIndex == 0 || nextIndex == 3 {
|
||||||
|
g.Cursor = true
|
||||||
|
} else {
|
||||||
|
g.Cursor = false
|
||||||
|
}
|
||||||
|
|
||||||
|
active = nextIndex
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func layout(g *gocui.Gui) error {
|
||||||
|
maxX, maxY := g.Size()
|
||||||
|
if v, err := g.SetView("v1", 0, 0, maxX/2-1, maxY/2-1, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Title = "v1 (editable)"
|
||||||
|
v.Editable = true
|
||||||
|
v.Wrap = true
|
||||||
|
|
||||||
|
if _, err = setCurrentViewOnTop(g, "v1"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if v, err := g.SetView("v2", maxX/2-1, 0, maxX-1, maxY/2-1, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Title = "v2"
|
||||||
|
v.Wrap = true
|
||||||
|
v.Autoscroll = true
|
||||||
|
}
|
||||||
|
if v, err := g.SetView("v3", 0, maxY/2-1, maxX/2-1, maxY-1, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Title = "v3"
|
||||||
|
v.Wrap = true
|
||||||
|
v.Autoscroll = true
|
||||||
|
fmt.Fprint(v, "Press TAB to change current view")
|
||||||
|
}
|
||||||
|
if v, err := g.SetView("v4", maxX/2, maxY/2, maxX-1, maxY-1, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Title = "v4 (editable)"
|
||||||
|
v.Editable = true
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func quit(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
g, err := gocui.NewGui(gocui.OutputNormal, true)
|
||||||
|
if err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
defer g.Close()
|
||||||
|
|
||||||
|
g.Highlight = true
|
||||||
|
g.Cursor = true
|
||||||
|
g.SelFgColor = gocui.ColorGreen
|
||||||
|
|
||||||
|
g.SetManagerFunc(layout)
|
||||||
|
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone, nextView); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,110 @@
|
||||||
|
// Copyright 2014 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 (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/awesome-gocui/gocui"
|
||||||
|
colorful "github.com/lucasb-eyer/go-colorful"
|
||||||
|
)
|
||||||
|
|
||||||
|
var dark = false
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
os.Setenv("COLORTERM", "truecolor")
|
||||||
|
g, err := gocui.NewGui(gocui.OutputTrue, true)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
defer g.Close()
|
||||||
|
|
||||||
|
g.SetManagerFunc(layout)
|
||||||
|
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyCtrlR, gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
if dark {
|
||||||
|
dark = false
|
||||||
|
} else {
|
||||||
|
dark = true
|
||||||
|
}
|
||||||
|
displayHsv(v)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func layout(g *gocui.Gui) error {
|
||||||
|
maxX, maxY := g.Size()
|
||||||
|
rows := 33
|
||||||
|
cols := 182
|
||||||
|
if maxY < rows {
|
||||||
|
rows = maxY
|
||||||
|
}
|
||||||
|
if maxX < cols {
|
||||||
|
cols = maxX
|
||||||
|
}
|
||||||
|
|
||||||
|
if v, err := g.SetView("colors", 0, 0, cols-1, rows-1, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.FrameColor = gocui.GetColor("#FFAA55")
|
||||||
|
displayHsv(v)
|
||||||
|
|
||||||
|
if _, err := g.SetCurrentView("colors"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func displayHsv(v *gocui.View) {
|
||||||
|
v.Clear()
|
||||||
|
str := ""
|
||||||
|
// HSV color space (lines are value or saturation)
|
||||||
|
for i := 50; i > 0; i -= 2 {
|
||||||
|
// Hue
|
||||||
|
for j := 0; j < 360; j += 2 {
|
||||||
|
ir, ig, ib := hsv(j, i-1)
|
||||||
|
ir2, ig2, ib2 := hsv(j, i)
|
||||||
|
str += fmt.Sprintf("\x1b[48;2;%d;%d;%dm\x1b[38;2;%d;%d;%dm▀\x1b[0m", ir, ig, ib, ir2, ig2, ib2)
|
||||||
|
}
|
||||||
|
str += "\n"
|
||||||
|
fmt.Fprint(v, str)
|
||||||
|
str = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintln(v, "\n\x1b[38;5;245mCtrl + R - Switch light/dark mode")
|
||||||
|
fmt.Fprintln(v, "\nCtrl + C - Exit\n")
|
||||||
|
fmt.Fprint(v, "Example should enable true color, but if it doesn't work run this command: \x1b[0mexport COLORTERM=truecolor")
|
||||||
|
}
|
||||||
|
|
||||||
|
func hsv(hue, sv int) (uint32, uint32, uint32) {
|
||||||
|
if !dark {
|
||||||
|
ir, ig, ib, _ := colorful.Hsv(float64(hue), float64(sv)/50, float64(1)).RGBA()
|
||||||
|
return ir >> 8, ig >> 8, ib >> 8
|
||||||
|
}
|
||||||
|
ir, ig, ib, _ := colorful.Hsv(float64(hue), float64(1), float64(sv)/50).RGBA()
|
||||||
|
return ir >> 8, ig >> 8, ib >> 8
|
||||||
|
}
|
||||||
|
|
||||||
|
func quit(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
// Copyright 2014 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 (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/awesome-gocui/gocui"
|
||||||
|
)
|
||||||
|
|
||||||
|
const delta = 1
|
||||||
|
|
||||||
|
var (
|
||||||
|
views = []string{}
|
||||||
|
curView = -1
|
||||||
|
idxView = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
g, err := gocui.NewGui(gocui.OutputNormal, true)
|
||||||
|
if err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
defer g.Close()
|
||||||
|
|
||||||
|
g.Highlight = true
|
||||||
|
g.SelFgColor = gocui.ColorRed
|
||||||
|
g.SelFrameColor = gocui.ColorRed
|
||||||
|
|
||||||
|
g.SetManagerFunc(layout)
|
||||||
|
|
||||||
|
if err := initKeybindings(g); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
if err := newView(g); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func layout(g *gocui.Gui) error {
|
||||||
|
maxX, _ := g.Size()
|
||||||
|
v, err := g.SetView("help", maxX-25, 0, maxX-1, 9, 0)
|
||||||
|
if err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(v, "KEYBINDINGS")
|
||||||
|
fmt.Fprintln(v, "Space: New View")
|
||||||
|
fmt.Fprintln(v, "Tab: Next View")
|
||||||
|
fmt.Fprintln(v, "← ↑ → ↓: Move View")
|
||||||
|
fmt.Fprintln(v, "Backspace: Delete View")
|
||||||
|
fmt.Fprintln(v, "t: Set view on top")
|
||||||
|
fmt.Fprintln(v, "b: Set view on bottom")
|
||||||
|
fmt.Fprintln(v, "^C: Exit")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func initKeybindings(g *gocui.Gui) error {
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeySpace, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return newView(g)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyBackspace2, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return delView(g)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return nextView(g, true)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyArrowLeft, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return moveView(g, v, -delta, 0)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyArrowRight, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return moveView(g, v, delta, 0)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyArrowDown, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return moveView(g, v, 0, delta)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyArrowUp, gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return moveView(g, v, 0, -delta)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", 't', gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
_, err := g.SetViewOnTop(views[curView])
|
||||||
|
return err
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", 'b', gocui.ModNone,
|
||||||
|
func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
_, err := g.SetViewOnBottom(views[curView])
|
||||||
|
return err
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func newView(g *gocui.Gui) error {
|
||||||
|
maxX, maxY := g.Size()
|
||||||
|
name := fmt.Sprintf("v%v", idxView)
|
||||||
|
v, err := g.SetView(name, maxX/2-5, maxY/2-5, maxX/2+5, maxY/2+5, 0)
|
||||||
|
if err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Wrap = true
|
||||||
|
fmt.Fprintln(v, strings.Repeat(name+" ", 30))
|
||||||
|
}
|
||||||
|
if _, err := g.SetCurrentView(name); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
views = append(views, name)
|
||||||
|
curView = len(views) - 1
|
||||||
|
idxView += 1
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func delView(g *gocui.Gui) error {
|
||||||
|
if len(views) <= 1 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.DeleteView(views[curView]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
views = append(views[:curView], views[curView+1:]...)
|
||||||
|
|
||||||
|
return nextView(g, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func nextView(g *gocui.Gui, disableCurrent bool) error {
|
||||||
|
next := curView + 1
|
||||||
|
if next > len(views)-1 {
|
||||||
|
next = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := g.SetCurrentView(views[next]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
curView = next
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func moveView(g *gocui.Gui, v *gocui.View, dx, dy int) error {
|
||||||
|
name := v.Name()
|
||||||
|
x0, y0, x1, y1, err := g.ViewPosition(name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := g.SetView(name, x0+dx, y0+dy, x1+dx, y1+dy, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
// Copyright 2014 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 (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/awesome-gocui/gocui"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
g, err := gocui.NewGui(gocui.OutputNormal, true)
|
||||||
|
if err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
defer g.Close()
|
||||||
|
|
||||||
|
g.Cursor = true
|
||||||
|
g.Mouse = true
|
||||||
|
|
||||||
|
g.SetManagerFunc(layout)
|
||||||
|
|
||||||
|
if err := keybindings(g); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func layout(g *gocui.Gui) error {
|
||||||
|
if v, err := g.SetView("but1", 2, 2, 22, 7, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Highlight = true
|
||||||
|
v.SelBgColor = gocui.ColorGreen
|
||||||
|
v.SelFgColor = gocui.ColorBlack
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 1")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 2")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 3")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 4")
|
||||||
|
if _, err := g.SetCurrentView("but1"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, err := g.SetView("but2", 24, 2, 44, 4, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
v.Highlight = true
|
||||||
|
v.SelBgColor = gocui.ColorGreen
|
||||||
|
v.SelFgColor = gocui.ColorBlack
|
||||||
|
fmt.Fprintln(v, "Button 2 - line 1")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func keybindings(g *gocui.Gui) error {
|
||||||
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range []string{"but1", "but2"} {
|
||||||
|
if err := g.SetKeybinding(n, gocui.MouseLeft, gocui.ModNone, showMsg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("msg", gocui.MouseLeft, gocui.ModNone, delMsg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.MouseRight, gocui.ModNone, delMsg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", gocui.MouseMiddle, gocui.ModNone, delMsg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func quit(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
}
|
||||||
|
|
||||||
|
func showMsg(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
var l string
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if _, err := g.SetCurrentView(v.Name()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, cy := v.Cursor()
|
||||||
|
if l, err = v.Line(cy); err != nil {
|
||||||
|
l = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
maxX, maxY := g.Size()
|
||||||
|
if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0); err != nil {
|
||||||
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(v, l)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func delMsg(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
// Error check removed, because delete could be called multiple times with the above keybindings
|
||||||
|
g.DeleteView("msg")
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -7,8 +7,8 @@ import "time"
|
||||||
|
|
||||||
import "github.com/davecgh/go-spew/spew"
|
import "github.com/davecgh/go-spew/spew"
|
||||||
|
|
||||||
import "git.wit.com/wit/gui"
|
import "git.wit.org/wit/gui"
|
||||||
import pb "git.wit.com/wit/witProtobuf"
|
import pb "git.wit.org/jcarr/witProtobuf"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
Loading…
Reference in New Issue