1// Copyright 2014 The gocui Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package main
6
7import (
8	"fmt"
9	"log"
10
11	"github.com/jroimartin/gocui"
12)
13
14func main() {
15	g, err := gocui.NewGui(gocui.OutputNormal)
16	if err != nil {
17		log.Panicln(err)
18	}
19	defer g.Close()
20
21	g.SetManagerFunc(layout)
22
23	if err := keybindings(g); err != nil {
24		log.Panicln(err)
25	}
26
27	if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
28		log.Panicln(err)
29	}
30}
31
32func layout(g *gocui.Gui) error {
33	if v, err := g.SetView("v1", 10, 2, 30, 6); err != nil {
34		if err != gocui.ErrUnknownView {
35			return err
36		}
37		fmt.Fprintln(v, "View #1")
38	}
39	if v, err := g.SetView("v2", 20, 4, 40, 8); err != nil {
40		if err != gocui.ErrUnknownView {
41			return err
42		}
43		fmt.Fprintln(v, "View #2")
44	}
45	if v, err := g.SetView("v3", 30, 6, 50, 10); err != nil {
46		if err != gocui.ErrUnknownView {
47			return err
48		}
49		fmt.Fprintln(v, "View #3")
50	}
51
52	return nil
53}
54
55func keybindings(g *gocui.Gui) error {
56	err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error {
57		return gocui.ErrQuit
58	})
59	if err != nil {
60		return err
61	}
62
63	err = g.SetKeybinding("", '1', gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error {
64		_, err := g.SetViewOnTop("v1")
65		return err
66	})
67	if err != nil {
68		return err
69	}
70
71	err = g.SetKeybinding("", '2', gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error {
72		_, err := g.SetViewOnTop("v2")
73		return err
74	})
75	if err != nil {
76		return err
77	}
78
79	err = g.SetKeybinding("", '3', gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error {
80		_, err := g.SetViewOnTop("v3")
81		return err
82	})
83	if err != nil {
84		return err
85	}
86
87	return nil
88}
89