From 0a82a57eeb0dbd27d765fce43186fe4d8e1cd8f4 Mon Sep 17 00:00:00 2001 From: vilmibm Date: Wed, 14 Dec 2022 14:51:32 -0800 Subject: [PATCH] WIP on single column support --- pkg/cmd/extension/browse/browse.go | 42 +++++++++++++++++++++--------- pkg/cmd/extension/command.go | 19 ++++++++------ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/pkg/cmd/extension/browse/browse.go b/pkg/cmd/extension/browse/browse.go index b24202785..3ae04ef3e 100644 --- a/pkg/cmd/extension/browse/browse.go +++ b/pkg/cmd/extension/browse/browse.go @@ -26,16 +26,17 @@ import ( const pagingOffset = 24 type ExtBrowseOpts struct { - Cmd *cobra.Command - Browser ibrowser - IO *iostreams.IOStreams - Searcher search.Searcher - Em extensions.ExtensionManager - Client *http.Client - Logger *log.Logger - Cfg config.Config - Rg *readmeGetter - Debug bool + Cmd *cobra.Command + Browser ibrowser + IO *iostreams.IOStreams + Searcher search.Searcher + Em extensions.ExtensionManager + Client *http.Client + Logger *log.Logger + Cfg config.Config + Rg *readmeGetter + Debug bool + SingleColumn bool } type ibrowser interface { @@ -49,7 +50,7 @@ type uiRegistry struct { App *tview.Application Outerflex *tview.Flex List *tview.List - Readme *tview.TextView + Pages *tview.Pages } type extEntry struct { @@ -97,6 +98,12 @@ func newExtList(opts ExtBrowseOpts, ui uiRegistry, extEntries []extEntry) *extLi ui.List.SetSelectedBackgroundColor(tcell.ColorWhite) ui.List.SetWrapAround(false) ui.List.SetBorderPadding(1, 1, 1, 1) + if opts.SingleColumn { + ui.List.SetSelectedFunc(func(ix int, _, _ string, _ rune) { + + // TODO switch to readme page + }) + } el := &extList{ ui: ui, @@ -109,6 +116,7 @@ func newExtList(opts ExtBrowseOpts, ui uiRegistry, extEntries []extEntry) *extLi return el } +// TODO use pages for this func (el *extList) createModal() *tview.Modal { m := tview.NewModal() m.SetBackgroundColor(tcell.ColorPurple) @@ -368,10 +376,13 @@ func ExtBrowse(opts ExtBrowseOpts) error { help := tview.NewTextView() help.SetText("?: help q: quit") + pages := tview.NewPages() + ui := uiRegistry{ App: app, Outerflex: outerFlex, List: list, + Pages: pages, } extList := newExtList(opts, ui, extEntries) @@ -413,7 +424,9 @@ func ExtBrowse(opts ExtBrowseOpts) error { innerFlex.SetDirection(tview.FlexColumn) innerFlex.AddItem(list, 0, 1, true) - innerFlex.AddItem(readme, 0, 1, false) + if !opts.SingleColumn { + innerFlex.AddItem(readme, 0, 1, false) + } outerFlex.SetDirection(tview.FlexRow) outerFlex.AddItem(header, 1, -1, false) @@ -460,10 +473,13 @@ func ExtBrowse(opts ExtBrowseOpts) error { (On a mac, page down and page up are fn+down arrow and fn+up arrow) `)) - pages := tview.NewPages() pages.AddPage("main", outerFlex, true, true) pages.AddPage("help", helpBig, true, false) + if opts.SingleColumn { + pages.AddPage("readme", readme, true, false) + } + app.SetRoot(pages, true) // Force fetching of initial readme by loading it just prior to the first diff --git a/pkg/cmd/extension/command.go b/pkg/cmd/extension/command.go index 3bfd8cfe8..f47d09d37 100644 --- a/pkg/cmd/extension/command.go +++ b/pkg/cmd/extension/command.go @@ -410,6 +410,7 @@ func NewCmdExtension(f *cmdutil.Factory) *cobra.Command { }, func() *cobra.Command { var debug bool + var singleColumn bool cmd := &cobra.Command{ Use: "browse", Short: "Enter a UI for browsing, adding, and removing extensions", @@ -460,20 +461,22 @@ func NewCmdExtension(f *cmdutil.Factory) *cobra.Command { searcher := search.NewSearcher(api.NewCachedHTTPClient(client, time.Hour*24), host) opts := browse.ExtBrowseOpts{ - Cmd: cmd, - IO: io, - Browser: browser, - Searcher: searcher, - Em: m, - Client: client, - Cfg: cfg, - Debug: debug, + Cmd: cmd, + IO: io, + Browser: browser, + Searcher: searcher, + Em: m, + Client: client, + Cfg: cfg, + Debug: debug, + SingleColumn: singleColumn, } return browse.ExtBrowse(opts) }, } cmd.Flags().BoolVar(&debug, "debug", false, "log to /tmp/extBrowse-*") + cmd.Flags().BoolVarP(&singleColumn, "single-column", "s", false, "Render TUI with only one column of text") return cmd }(), &cobra.Command{