func (w *Multibar) textWithStyle() (string, tcell.Style) {
	hasVisualSelection := w.api.List() != nil && w.api.List().HasVisualSelection()
	sequenceText := w.api.Sequencer().String()
	multibarMode := w.api.Multibar().Mode()
	msg := log.Last(log.InfoLevel)
	switch {
	case multibarMode == multibar.ModeInput:
		w.messageTimestamp = time.Now()
		return ":" + w.api.Multibar().String(), w.Style("commandText")
	case multibarMode == multibar.ModeSearch:
		w.messageTimestamp = time.Now()
		return "/" + w.api.Multibar().String(), w.Style("searchText")
	case len(sequenceText) > 0:
		w.messageTimestamp = time.Now()
		return sequenceText, w.Style("sequenceText")
	case hasVisualSelection:
		w.messageTimestamp = time.Now()
		return "-- VISUAL --", w.Style("visualText")
	case msg != nil && w.messageTimestamp.UnixNano() < msg.Timestamp.UnixNano():
		return msg.Text, w.MessageStyle(*msg)
	default:
		return "", w.Style("default")
	}
}
Figure out what the multibar should render, and return it with the corresponding style
package widgets
import (
	"github.com/ambientsound/visp/api"
	"github.com/ambientsound/visp/log"
	"github.com/ambientsound/visp/multibar"
	"github.com/ambientsound/visp/style"
	"github.com/gdamore/tcell/v2"
	"github.com/gdamore/tcell/v2/views"
	"time"
)
type Multibar struct {
	api              api.API
	view             views.View
	messageTimestamp time.Time
	views.WidgetWatchers
	style.Styled
}
var _ views.Widget = &Multibar{}
func NewMultibarWidget(a api.API) *Multibar {
	return &Multibar{
		api: a,
	}
}
func (w *Multibar) SetView(view views.View) {
	w.view = view
}
func (w *Multibar) Size() (int, int) {
	x, _ := w.view.Size()
	return x, 1
}
func (w *Multibar) Resize() {
}
func (w *Multibar) HandleEvent(ev tcell.Event) bool {
	return false
}