func (t *Terminal) Start() error {
	err := ui.Init()
	if err != nil {
		return err
	}
	go t.UsersDisplay()
	go t.InputDisplay()
	go t.MessagesDisplay()
	go t.Input()
	return nil
}
Start is a non-blocking call that starts all the displays.
package ui
import (
	"fmt"
	"regexp"
	"strings"
	ui "github.com/gizak/termui"
)
type Command struct {
	Name string
	Args []string
	Resp chan string
}
func NewCommand(name string, args []string) Command {
	return Command{
		Name: name,
		Args: args,
		Resp: make(chan string, 1),
	}
}
type Displays struct {
	Users chan []string
	Input chan string
	Msgs  chan string
}
type Inputs struct {
	Msgs chan string
	Cmds chan Command
}
type Terminal struct {
	display   Displays
	input     Inputs
	stop      chan struct{}
	reRenders map[int]chan struct{}
}
const (
	usersRender = iota
	msgsRender
	inputRender
)
func New(stop chan struct{}) (*Terminal, Displays, Inputs) {
	t := &Terminal{
		stop: stop,
		reRenders: map[int]chan struct{}{
			usersRender: make(chan struct{}, 1),
			msgsRender:  make(chan struct{}, 1),
			inputRender: make(chan struct{}, 1),
		},
		display: Displays{
			Users: make(chan []string, 1),
			Input: make(chan string, 1),
			Msgs:  make(chan string, 1),
		},
		input: Inputs{
			Msgs: make(chan string, 1),
			Cmds: make(chan Command, 1),
		},
	}
	return t, t.display, t.input
}