go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit 7f1b6e273f18bfc795a50d0f5324e68034990ef2
parent 9e9ee5bdfa7af9d79694d9cc3f12af9574167f81
Author: lash <dev@holbrook.no>
Date:   Thu, 28 Nov 2024 12:32:40 +0000

Add customizable menu separator

Diffstat:
Mrender/menu.go | 10+++++++++-
Mrender/menu_test.go | 23+++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/render/menu.go b/render/menu.go @@ -61,6 +61,7 @@ type Menu struct { //outputSize uint16 // maximum size constraint for the menu. sink bool keep bool + sep string } // String implements the String interface. @@ -74,10 +75,17 @@ func(m Menu) String() string { func NewMenu() *Menu { return &Menu{ keep: true, + sep: ":", } } // WithPageCount is a chainable function that defines the number of allowed pages for browsing. +func(m *Menu) WithSeparator(sep string) *Menu { + m.sep = sep + return m +} + +// WithPageCount is a chainable function that defines the number of allowed pages for browsing. func(m *Menu) WithPageCount(pageCount uint16) *Menu { m.pageCount = pageCount return m @@ -222,7 +230,7 @@ func(m *Menu) Render(ctx context.Context, idx uint16) (string, error) { if err != nil { return "", err } - r += fmt.Sprintf("%s:%s", choice, title) + r += fmt.Sprintf("%s%s%s", choice, m.sep, title) } if m.keep { m.menu = menuCopy diff --git a/render/menu_test.go b/render/menu_test.go @@ -86,3 +86,26 @@ func TestMenuBrowse(t *testing.T) { t.Fatalf("expected render fail") } } + +func TestMenuSep(t *testing.T) { + m := NewMenu().WithSeparator("//") + err := m.Put("1", "foo") + if err != nil { + t.Fatal(err) + } + err = m.Put("2", "bar") + if err != nil { + t.Fatal(err) + } + + ctx := context.TODO() + r, err := m.Render(ctx, 0) + if err != nil { + t.Fatal(err) + } + expect := `1//foo +2//bar` + if r != expect { + t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", expect, r) + } +}