From 7f3daaac59f4f8b370d4bfb72de00feab297f9b2 Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Sat, 11 May 2019 11:14:02 -0400 Subject: [PATCH 1/4] Have keyboard widget manage its own help Define help with keys This means that keys and help are automatically in sync This means that you can't define keys, but forget help This unfortunately also means that formatting may not be quite as good --- flags/flags.go | 11 ---- help/help.go | 39 ------------- modules/datadog/keyboard.go | 16 +++--- modules/datadog/widget.go | 19 +------ modules/gerrit/keyboard.go | 24 ++++---- modules/gerrit/widget.go | 24 +------- modules/git/keyboard.go | 14 ++--- modules/git/widget.go | 19 +------ modules/github/keyboard.go | 16 +++--- modules/github/widget.go | 20 +------ modules/gitlab/keyboard.go | 12 ++-- modules/gitlab/widget.go | 18 +----- modules/gitter/keyboard.go | 14 ++--- modules/gitter/widget.go | 18 +----- modules/hackernews/keyboard.go | 20 +++---- modules/hackernews/widget.go | 21 +------ modules/jenkins/keyboard.go | 18 +++--- modules/jenkins/widget.go | 20 +------ modules/jira/keyboard.go | 16 +++--- modules/jira/widget.go | 19 +------ modules/mercurial/keyboard.go | 14 ++--- modules/mercurial/widget.go | 19 +------ modules/nbascore/keyboard.go | 12 ++-- modules/nbascore/widget.go | 13 +---- modules/rollbar/keyboard.go | 20 +++---- modules/rollbar/widget.go | 21 +------ modules/spotify/keyboard.go | 8 +-- modules/spotify/widget.go | 13 +---- modules/spotifyweb/keyboard.go | 10 ++-- modules/spotifyweb/widget.go | 26 +-------- modules/textfile/keyboard.go | 12 ++-- modules/textfile/widget.go | 18 +----- modules/todo/keyboard.go | 26 ++++----- modules/todo/widget.go | 25 +-------- modules/todoist/keyboard.go | 24 ++++---- modules/todoist/widget.go | 24 +------- modules/travisci/keyboard.go | 18 +++--- modules/travisci/widget.go | 20 +------ modules/twitter/keyboard.go | 14 ++--- modules/twitter/widget.go | 18 +----- modules/victorops/widget.go | 9 --- modules/weatherservices/weather/keyboard.go | 10 ++-- modules/weatherservices/weather/widget.go | 17 +----- modules/zendesk/keyboard.go | 15 ++--- modules/zendesk/widget.go | 24 ++------ wtf/helpful_widget.go | 40 ------------- wtf/keyboard_widget.go | 62 +++++++++++++++++++-- 47 files changed, 269 insertions(+), 641 deletions(-) delete mode 100644 help/help.go delete mode 100644 wtf/helpful_widget.go diff --git a/flags/flags.go b/flags/flags.go index 05da8042..4eb856a3 100644 --- a/flags/flags.go +++ b/flags/flags.go @@ -6,13 +6,11 @@ import ( "path/filepath" goFlags "github.com/jessevdk/go-flags" - "github.com/wtfutil/wtf/help" "github.com/wtfutil/wtf/utils" ) type Flags struct { Config string `short:"c" long:"config" optional:"yes" description:"Path to config file"` - Module string `short:"m" long:"module" optional:"yes" description:"Display info about a specific module, i.e.: 'wtf -m=todo'"` Profile bool `short:"p" long:"profile" optional:"yes" description:"Profile application memory usage"` Version bool `short:"v" long:"version" description:"Show version info"` } @@ -29,11 +27,6 @@ func (flags *Flags) ConfigFilePath() string { } func (flags *Flags) Display(version string) { - if flags.HasModule() { - help.Display(flags.Module) - os.Exit(0) - } - if flags.HasVersion() { fmt.Println(version) os.Exit(0) @@ -44,10 +37,6 @@ func (flags *Flags) HasConfig() bool { return len(flags.Config) > 0 } -func (flags *Flags) HasModule() bool { - return len(flags.Module) > 0 -} - func (flags *Flags) HasVersion() bool { return flags.Version == true } diff --git a/help/help.go b/help/help.go deleted file mode 100644 index 8fbc0857..00000000 --- a/help/help.go +++ /dev/null @@ -1,39 +0,0 @@ -package help - -import ( - "fmt" - - "github.com/wtfutil/wtf/modules/git" - "github.com/wtfutil/wtf/modules/github" - "github.com/wtfutil/wtf/modules/textfile" - "github.com/wtfutil/wtf/modules/todo" - "github.com/wtfutil/wtf/modules/todoist" - "github.com/wtfutil/wtf/modules/weatherservices/weather" -) - -func Display(moduleName string) { - if moduleName == "" { - fmt.Println("\n --module takes a module name as an argument, i.e: '--module=github'") - } else { - fmt.Printf("%s\n", helpFor(moduleName)) - } -} - -func helpFor(moduleName string) string { - switch moduleName { - case "git": - return git.HelpText - case "github": - return github.HelpText - case "textfile": - return textfile.HelpText - case "todo": - return todo.HelpText - case "todoist": - return todoist.HelpText - case "weather": - return weather.HelpText - default: - return fmt.Sprintf("\n There is no help available for '%s'", moduleName) - } -} diff --git a/modules/datadog/keyboard.go b/modules/datadog/keyboard.go index 58daa141..af9ef78b 100644 --- a/modules/datadog/keyboard.go +++ b/modules/datadog/keyboard.go @@ -5,13 +5,13 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openItem) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openItem, "Open item in browser") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openItem) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openItem, "Open item in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/datadog/widget.go b/modules/datadog/widget.go index 3f9dbb79..a68a8be9 100644 --- a/modules/datadog/widget.go +++ b/modules/datadog/widget.go @@ -8,21 +8,7 @@ import ( datadog "github.com/zorkian/go-datadog-api" ) -const HelpText = ` - Keyboard commands for Datadog: - - /: Show/hide this help window - j: Select the next item in the list - k: Select the previous item in the list - - arrow down: Select the next item in the list - arrow up: Select the previous item in the list - - return: Open the selected issue in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -32,8 +18,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -43,7 +28,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/gerrit/keyboard.go b/modules/gerrit/keyboard.go index 060fe7e3..a4a97324 100644 --- a/modules/gerrit/keyboard.go +++ b/modules/gerrit/keyboard.go @@ -5,17 +5,17 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.prevProject) - widget.SetKeyboardChar("l", widget.nextProject) - widget.SetKeyboardChar("j", widget.nextReview) - widget.SetKeyboardChar("k", widget.prevReview) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help window") + widget.SetKeyboardChar("h", widget.prevProject, "Select previous project") + widget.SetKeyboardChar("l", widget.nextProject, "Select next project") + widget.SetKeyboardChar("j", widget.nextReview, "Select next review") + widget.SetKeyboardChar("k", widget.prevReview, "Select previous review") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh items") - widget.SetKeyboardKey(tcell.KeyLeft, widget.prevProject) - widget.SetKeyboardKey(tcell.KeyRight, widget.nextProject) - widget.SetKeyboardKey(tcell.KeyDown, widget.nextReview) - widget.SetKeyboardKey(tcell.KeyUp, widget.prevReview) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openReview) - widget.SetKeyboardKey(tcell.KeyEsc, widget.unselect) + widget.SetKeyboardKey(tcell.KeyLeft, widget.prevProject, "Select previous project") + widget.SetKeyboardKey(tcell.KeyRight, widget.nextProject, "Select next project") + widget.SetKeyboardKey(tcell.KeyDown, widget.nextReview, "Select next review") + widget.SetKeyboardKey(tcell.KeyUp, widget.prevReview, "Select previous review") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openReview, "Open review in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.unselect, "Clear selection") } diff --git a/modules/gerrit/widget.go b/modules/gerrit/widget.go index e1536ce0..2aac5f5b 100644 --- a/modules/gerrit/widget.go +++ b/modules/gerrit/widget.go @@ -11,26 +11,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Gerrit: - - /: Show/hide this help window - h: Show the previous project - l: Show the next project - j: Select the next review in the list - k: Select the previous review in the list - r: Refresh the data - - arrow left: Show the previous project - arrow right: Show the next project - arrow down: Select the next review in the list - arrow up: Select the previous review in the list - - return: Open the selected review in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -49,8 +30,7 @@ var ( func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Idx: 0, @@ -61,7 +41,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) widget.unselect() diff --git a/modules/git/keyboard.go b/modules/git/keyboard.go index 38664ecd..ff02cfbf 100644 --- a/modules/git/keyboard.go +++ b/modules/git/keyboard.go @@ -3,12 +3,12 @@ package git import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("p", widget.Pull) - widget.SetKeyboardChar("c", widget.Checkout) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help window") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("p", widget.Pull, "Pull repo") + widget.SetKeyboardChar("c", widget.Checkout, "Checkout branch") - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } diff --git a/modules/git/widget.go b/modules/git/widget.go index 41026d6c..a4f8d884 100644 --- a/modules/git/widget.go +++ b/modules/git/widget.go @@ -11,25 +11,11 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Git: - - /: Show/hide this help window - c: Checkout to branch - h: Previous git repository - l: Next git repository - p: Pull current git repository - - arrow left: Previous git repository - arrow right: Next git repository -` - const offscreen = -1000 const modalWidth = 80 const modalHeight = 7 type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.MultiSourceWidget wtf.TextWidget @@ -43,8 +29,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), MultiSourceWidget: wtf.NewMultiSourceWidget(settings.common, "repository", "repositories"), TextWidget: wtf.NewTextWidget(app, settings.common, true), @@ -58,7 +43,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.SetDisplayFunction(widget.display) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/github/keyboard.go b/modules/github/keyboard.go index 24d1c347..9408c0bc 100644 --- a/modules/github/keyboard.go +++ b/modules/github/keyboard.go @@ -5,13 +5,13 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("o", widget.openRepo) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("o", widget.openRepo, "Open item in browser") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyEnter, widget.openRepo) - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyEnter, widget.openRepo, "Open item in browser") + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } diff --git a/modules/github/widget.go b/modules/github/widget.go index 5196bc04..04dbe9e7 100644 --- a/modules/github/widget.go +++ b/modules/github/widget.go @@ -5,22 +5,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for GitHub: - - /: Show/hide this help window - h: Previous git repository - l: Next git repository - r: Refresh the data - - arrow left: Previous git repository - arrow right: Next git repository - - return: Open the selected repository in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -33,8 +18,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Idx: 0, @@ -48,7 +32,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/gitlab/keyboard.go b/modules/gitlab/keyboard.go index d88ac6e5..fad6af43 100644 --- a/modules/gitlab/keyboard.go +++ b/modules/gitlab/keyboard.go @@ -3,11 +3,11 @@ package gitlab import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } diff --git a/modules/gitlab/widget.go b/modules/gitlab/widget.go index 05aebe62..88fcd761 100644 --- a/modules/gitlab/widget.go +++ b/modules/gitlab/widget.go @@ -6,20 +6,7 @@ import ( glb "github.com/xanzy/go-gitlab" ) -const HelpText = ` - Keyboard commands for Gitlab: - - /: Show/hide this help window - h: Previous project - l: Next project - r: Refresh the data - - arrow left: Previous project - arrow right: Next project -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -39,8 +26,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * } widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Idx: 0, @@ -54,7 +40,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/gitter/keyboard.go b/modules/gitter/keyboard.go index 77abbc84..e9c961ee 100644 --- a/modules/gitter/keyboard.go +++ b/modules/gitter/keyboard.go @@ -3,12 +3,12 @@ package gitter import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/gitter/widget.go b/modules/gitter/widget.go index a0976871..95dc3037 100644 --- a/modules/gitter/widget.go +++ b/modules/gitter/widget.go @@ -7,21 +7,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Gitter: - - /: Show/hide this help window - j: Select the next message in the list - k: Select the previous message in the list - r: Refresh the data - - arrow down: Select the next message in the list - arrow up: Select the previous message in the list -` - // A Widget represents a Gitter widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -32,8 +19,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -43,7 +29,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/hackernews/keyboard.go b/modules/hackernews/keyboard.go index ef305ba4..e522246f 100644 --- a/modules/hackernews/keyboard.go +++ b/modules/hackernews/keyboard.go @@ -3,15 +3,15 @@ package hackernews import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openStory) - widget.SetKeyboardChar("r", widget.Refresh) - widget.SetKeyboardChar("c", widget.openComments) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help widget") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openStory, "Open story in browser") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") + widget.SetKeyboardChar("c", widget.openComments, "Open comments in browser") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openStory) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openStory, "Open story in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/hackernews/widget.go b/modules/hackernews/widget.go index 9131f88d..a1506d86 100644 --- a/modules/hackernews/widget.go +++ b/modules/hackernews/widget.go @@ -9,23 +9,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Hacker News: - - /: Show/hide this help window - j: Select the next story in the list - k: Select the previous story in the list - r: Refresh the data - - arrow down: Select the next story in the list - arrow up: Select the previous story in the list - - return: Open the selected story in a browser - c: Open the comments of the article -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -35,8 +19,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -46,7 +29,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/jenkins/keyboard.go b/modules/jenkins/keyboard.go index 20735a3f..21ec47a5 100644 --- a/modules/jenkins/keyboard.go +++ b/modules/jenkins/keyboard.go @@ -3,14 +3,14 @@ package jenkins import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openJob) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openJob, "Open job in browser") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openJob) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openJob, "Open job in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/jenkins/widget.go b/modules/jenkins/widget.go index 9db9a7d1..20187a76 100644 --- a/modules/jenkins/widget.go +++ b/modules/jenkins/widget.go @@ -8,22 +8,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Jenkins: - - /: Show/hide this help window - j: Select the next job in the list - k: Select the previous job in the list - r: Refresh the data - - arrow down: Select the next job in the list - arrow up: Select the previous job in the list - - return: Open the selected job in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -33,8 +18,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -44,7 +28,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/jira/keyboard.go b/modules/jira/keyboard.go index b89b27da..10097e62 100644 --- a/modules/jira/keyboard.go +++ b/modules/jira/keyboard.go @@ -5,13 +5,13 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openItem) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openItem, "Open item in browser") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openItem) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openItem, "Open item in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/jira/widget.go b/modules/jira/widget.go index ba1b8008..97db517d 100644 --- a/modules/jira/widget.go +++ b/modules/jira/widget.go @@ -7,21 +7,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Jira: - - /: Show/hide this help window - j: Select the next item in the list - k: Select the previous item in the list - - arrow down: Select the next item in the list - arrow up: Select the previous item in the list - - return: Open the selected issue in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -31,8 +17,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -42,7 +27,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/mercurial/keyboard.go b/modules/mercurial/keyboard.go index 5d63c9bb..afcff63b 100644 --- a/modules/mercurial/keyboard.go +++ b/modules/mercurial/keyboard.go @@ -3,12 +3,12 @@ package mercurial import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("p", widget.Pull) - widget.SetKeyboardChar("c", widget.Checkout) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("p", widget.Pull, "Pull repo") + widget.SetKeyboardChar("c", widget.Checkout, "Checkout branch") - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } diff --git a/modules/mercurial/widget.go b/modules/mercurial/widget.go index 36748dd4..ed5b78e5 100644 --- a/modules/mercurial/widget.go +++ b/modules/mercurial/widget.go @@ -6,26 +6,12 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Mercurial: - - /: Show/hide this help window - c: Checkout to branch - h: Previous mercurial repository - l: Next mercurial repository - p: Pull current mercurial repository - - arrow left: Previous mercurial repository - arrow right: Next mercurial repository -` - const offscreen = -1000 const modalWidth = 80 const modalHeight = 7 // A Widget represents a Mercurial widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.MultiSourceWidget wtf.TextWidget @@ -39,8 +25,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), MultiSourceWidget: wtf.NewMultiSourceWidget(settings.common, "repository", "repositories"), TextWidget: wtf.NewTextWidget(app, settings.common, true), @@ -54,7 +39,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/nbascore/keyboard.go b/modules/nbascore/keyboard.go index afa7effe..c514f73a 100644 --- a/modules/nbascore/keyboard.go +++ b/modules/nbascore/keyboard.go @@ -3,13 +3,13 @@ package nbascore import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.prev) - widget.SetKeyboardChar("l", widget.next) - widget.SetKeyboardChar("c", widget.center) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.prev, "Select previous item") + widget.SetKeyboardChar("l", widget.next, "Select next item") + widget.SetKeyboardChar("c", widget.center, "???") - widget.SetKeyboardKey(tcell.KeyLeft, widget.prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.next, "Select next item") } func (widget *Widget) center() { diff --git a/modules/nbascore/widget.go b/modules/nbascore/widget.go index ac7a47d6..0cb8c457 100644 --- a/modules/nbascore/widget.go +++ b/modules/nbascore/widget.go @@ -12,16 +12,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for NBA Score: - h: Go to previous day - l: Go to next day - c: Go back to current day -` - // A Widget represents an NBA Score widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -35,8 +27,7 @@ var offset = 0 // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), settings: settings, @@ -47,7 +38,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetScrollable(true) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/rollbar/keyboard.go b/modules/rollbar/keyboard.go index a89e6ec1..5e9a1a2a 100644 --- a/modules/rollbar/keyboard.go +++ b/modules/rollbar/keyboard.go @@ -3,15 +3,15 @@ package rollbar import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openBuild) - widget.SetKeyboardChar("r", widget.Refresh) - widget.SetKeyboardChar("u", widget.Unselect) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openBuild, "Open item in browser") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") + widget.SetKeyboardChar("u", widget.Unselect, "Clear selection") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openBuild) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openBuild, "Open item in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/rollbar/widget.go b/modules/rollbar/widget.go index fa847ae0..7086be0a 100644 --- a/modules/rollbar/widget.go +++ b/modules/rollbar/widget.go @@ -7,24 +7,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Rollbar: - - /: Show/hide this help window - j: Select the next item in the list - k: Select the previous item in the list - r: Refresh the data - u: unselect the current item(removes item being perma highlighted) - - arrow down: Select the next item in the list - arrow up: Select the previous item in the list - - return: Open the selected item in a browser -` - // A Widget represents a Rollbar widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -35,8 +19,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -46,7 +29,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/spotify/keyboard.go b/modules/spotify/keyboard.go index 0994f593..9ee13add 100644 --- a/modules/spotify/keyboard.go +++ b/modules/spotify/keyboard.go @@ -5,10 +5,10 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.previous) - widget.SetKeyboardChar("l", widget.next) - widget.SetKeyboardChar(" ", widget.playPause) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.previous, "Select previous item") + widget.SetKeyboardChar("l", widget.next, "Select next item") + widget.SetKeyboardChar(" ", widget.playPause, "Play/pause song") } func (widget *Widget) previous() { diff --git a/modules/spotify/widget.go b/modules/spotify/widget.go index dfb151fb..dc6f8f69 100644 --- a/modules/spotify/widget.go +++ b/modules/spotify/widget.go @@ -8,16 +8,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - To control Spotify use: - [Spacebar] for Play & Pause - [h] for Previous Song - [l] for Next Song -` - // A Widget represents a Spotify widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -30,8 +22,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { spotifyClient := spotigopher.NewClient() widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Info: spotigopher.Info{}, @@ -49,7 +40,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetWordWrap(true) widget.View.SetTitle(fmt.Sprint("[green]Spotify[white]")) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/spotifyweb/keyboard.go b/modules/spotifyweb/keyboard.go index 9c962d48..c3a72e9b 100644 --- a/modules/spotifyweb/keyboard.go +++ b/modules/spotifyweb/keyboard.go @@ -5,11 +5,11 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.selectPrevious) - widget.SetKeyboardChar("l", widget.selectNext) - widget.SetKeyboardChar(" ", widget.playPause) - widget.SetKeyboardChar("s", widget.toggleShuffle) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.selectPrevious, "Select previous item") + widget.SetKeyboardChar("l", widget.selectNext, "Select next item") + widget.SetKeyboardChar(" ", widget.playPause, "Play/pause") + widget.SetKeyboardChar("s", widget.toggleShuffle, "Toggle shuffle") } func (widget *Widget) selectPrevious() { diff --git a/modules/spotifyweb/widget.go b/modules/spotifyweb/widget.go index 047b37ae..bf273f94 100644 --- a/modules/spotifyweb/widget.go +++ b/modules/spotifyweb/widget.go @@ -11,26 +11,6 @@ import ( "github.com/zmb3/spotify" ) -// HelpText contains the help text for the Spotify Web API widget. -const HelpText = ` -Keyboard commands for Spotify Web: - - Before any of these commands are used, you should authenticate using the - URL provided by the widget. - - The widget should automatically open a browser window for you, otherwise - you should check out the logs for the URL. - - /: Show/hide this help window - h: Switch to previous song in Spotify queue - l: Switch to next song in Spotify queue - s: Toggle shuffle - - [space]: Pause/play current song - - esc: Unselect the Spotify Web module -` - // Info is the struct that contains all the information the Spotify player displays to the user type Info struct { Artists string @@ -42,7 +22,6 @@ type Info struct { // Widget is the struct used by all WTF widgets to transfer to the main widget controller type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -92,8 +71,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * var playerState *spotify.PlayerState widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Info: Info{}, @@ -146,7 +124,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetWordWrap(true) widget.View.SetTitle("[green]Spotify Web[white]") - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/textfile/keyboard.go b/modules/textfile/keyboard.go index add068e2..d0d87dcc 100644 --- a/modules/textfile/keyboard.go +++ b/modules/textfile/keyboard.go @@ -6,13 +6,13 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("o", widget.openFile) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("o", widget.openFile, "Open item") - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } func (widget *Widget) openFile() { diff --git a/modules/textfile/widget.go b/modules/textfile/widget.go index 7a53752d..d91d57b7 100644 --- a/modules/textfile/widget.go +++ b/modules/textfile/widget.go @@ -18,20 +18,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Textfile: - - /: Show/hide this help window - h: Previous text file - l: Next text file - o: Open the text file in the operating system - - arrow left: Previous text file - arrow right: Next text file -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.MultiSourceWidget wtf.TextWidget @@ -43,8 +30,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), MultiSourceWidget: wtf.NewMultiSourceWidget(settings.common, "filePath", "filePaths"), TextWidget: wtf.NewTextWidget(app, settings.common, true), @@ -62,7 +48,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetWordWrap(true) widget.View.SetWrap(true) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) go widget.watchForFileChanges() diff --git a/modules/todo/keyboard.go b/modules/todo/keyboard.go index fbcab2e8..4082e680 100644 --- a/modules/todo/keyboard.go +++ b/modules/todo/keyboard.go @@ -9,20 +9,20 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar(" ", widget.toggleChecked) - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.displayNext) - widget.SetKeyboardChar("k", widget.displayPrev) - widget.SetKeyboardChar("n", widget.newItem) - widget.SetKeyboardChar("o", widget.openFile) + widget.SetKeyboardChar(" ", widget.toggleChecked, "Toggle checkmark") + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.displayNext, "Select next item") + widget.SetKeyboardChar("k", widget.displayPrev, "Select previous item") + widget.SetKeyboardChar("n", widget.newItem, "Create new item") + widget.SetKeyboardChar("o", widget.openFile, "Open file") - widget.SetKeyboardKey(tcell.KeyCtrlD, widget.deleteSelected) - widget.SetKeyboardKey(tcell.KeyCtrlJ, widget.demoteSelected) - widget.SetKeyboardKey(tcell.KeyCtrlK, widget.promoteSelected) - widget.SetKeyboardKey(tcell.KeyDown, widget.displayNext) - widget.SetKeyboardKey(tcell.KeyEnter, widget.editSelected) - widget.SetKeyboardKey(tcell.KeyEsc, widget.unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.displayPrev) + widget.SetKeyboardKey(tcell.KeyCtrlD, widget.deleteSelected, "Delete item") + widget.SetKeyboardKey(tcell.KeyCtrlJ, widget.demoteSelected, "Demote item") + widget.SetKeyboardKey(tcell.KeyCtrlK, widget.promoteSelected, "Promote item") + widget.SetKeyboardKey(tcell.KeyDown, widget.displayNext, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.editSelected, "Edit item") + widget.SetKeyboardKey(tcell.KeyEsc, widget.unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.displayPrev, "Select previous item") } func (widget *Widget) deleteSelected() { diff --git a/modules/todo/widget.go b/modules/todo/widget.go index bc8e3852..aaf93bb3 100644 --- a/modules/todo/widget.go +++ b/modules/todo/widget.go @@ -12,32 +12,12 @@ import ( "gopkg.in/yaml.v2" ) -const HelpText = ` - Keyboard commands for Todo: - - /: Show/hide this help window - j: Select the next item in the list - k: Select the previous item in the list - n: Create a new list item - o: Open the todo file in the operating system - - arrow down: Select the next item in the list - arrow up: Select the previous item in the list - - ctrl-d: Delete the selected item - - esc: Unselect the todo list - return: Edit selected item - space: Check the selected item on or off -` - const offscreen = -1000 const modalWidth = 80 const modalHeight = 7 // A Widget represents a Todo widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -51,8 +31,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), app: app, @@ -70,7 +49,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetRegions(true) widget.View.SetScrollable(true) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/todoist/keyboard.go b/modules/todoist/keyboard.go index cbae2762..b06cfccf 100644 --- a/modules/todoist/keyboard.go +++ b/modules/todoist/keyboard.go @@ -3,17 +3,17 @@ package todoist import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("c", widget.Close) - widget.SetKeyboardChar("d", widget.Delete) - widget.SetKeyboardChar("h", widget.PreviousProject) - widget.SetKeyboardChar("j", widget.Up) - widget.SetKeyboardChar("k", widget.Down) - widget.SetKeyboardChar("l", widget.NextProject) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("c", widget.Close, "Close item") + widget.SetKeyboardChar("d", widget.Delete, "Delete item") + widget.SetKeyboardChar("h", widget.PreviousProject, "Select previous project") + widget.SetKeyboardChar("j", widget.Up, "Select previous item") + widget.SetKeyboardChar("k", widget.Down, "Select next item") + widget.SetKeyboardChar("l", widget.NextProject, "Select next project") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyDown, widget.Down) - widget.SetKeyboardKey(tcell.KeyLeft, widget.PreviousProject) - widget.SetKeyboardKey(tcell.KeyRight, widget.NextProject) - widget.SetKeyboardKey(tcell.KeyUp, widget.Up) + widget.SetKeyboardKey(tcell.KeyDown, widget.Down, "Select next item") + widget.SetKeyboardKey(tcell.KeyLeft, widget.PreviousProject, "Select previous project") + widget.SetKeyboardKey(tcell.KeyRight, widget.NextProject, "Select next project") + widget.SetKeyboardKey(tcell.KeyUp, widget.Up, "Select previous item") } diff --git a/modules/todoist/widget.go b/modules/todoist/widget.go index 329ef96c..9d4fc2a4 100644 --- a/modules/todoist/widget.go +++ b/modules/todoist/widget.go @@ -7,27 +7,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Todoist: - - /: Show/hide this help window - c: Close the selected item - d: Delete the selected item - h: Previous Todoist list - j: Select the next item in the list - k: Select the previous item in the list - l: Next Todoist list - r: Refresh the todo list data - - arrow down: Select the next item in the list - arrow left: Previous Todoist list - arrow right: Next Todoist list - arrow up: Select the previous item in the list -` - // A Widget represents a Todoist widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -39,8 +20,7 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), settings: settings, @@ -52,7 +32,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/travisci/keyboard.go b/modules/travisci/keyboard.go index b8143aec..418fa0aa 100644 --- a/modules/travisci/keyboard.go +++ b/modules/travisci/keyboard.go @@ -3,14 +3,14 @@ package travisci import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openBuild) - widget.SetKeyboardChar("r", widget.Refresh) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openBuild, "Open item in browser") + widget.SetKeyboardChar("r", widget.Refresh, "Refresh widget") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openBuild) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openBuild, "Open item in browser") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") } diff --git a/modules/travisci/widget.go b/modules/travisci/widget.go index 49170a43..8bce6ade 100644 --- a/modules/travisci/widget.go +++ b/modules/travisci/widget.go @@ -8,22 +8,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Travis CI: - - /: Show/hide this help window - j: Select the next build in the list - k: Select the previous build in the list - r: Refresh the data - - arrow down: Select the next build in the list - arrow up: Select the previous build in the list - - return: Open the selected build in a browser -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -33,8 +18,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), settings: settings, @@ -44,7 +28,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/twitter/keyboard.go b/modules/twitter/keyboard.go index 4c2513b2..3a086898 100644 --- a/modules/twitter/keyboard.go +++ b/modules/twitter/keyboard.go @@ -6,14 +6,14 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) - widget.SetKeyboardChar("o", widget.openFile) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") + widget.SetKeyboardChar("o", widget.openFile, "Open item") - widget.SetKeyboardKey(tcell.KeyEnter, widget.openFile) - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyEnter, widget.openFile, "Open item") + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } func (widget *Widget) openFile() { diff --git a/modules/twitter/widget.go b/modules/twitter/widget.go index f26564a0..e21b5de2 100644 --- a/modules/twitter/widget.go +++ b/modules/twitter/widget.go @@ -10,20 +10,7 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Twitter: - - /: Show/hide this help window - h: Previous Twitter name - l: Next Twitter name - o: Open the Twitter handle in a browser - - arrow left: Previous Twitter name - arrow right: Next Twitter name -` - type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.MultiSourceWidget wtf.TextWidget @@ -36,8 +23,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), MultiSourceWidget: wtf.NewMultiSourceWidget(settings.common, "screenName", "screenNames"), TextWidget: wtf.NewTextWidget(app, settings.common, true), @@ -56,7 +42,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.View.SetWrap(true) widget.View.SetWordWrap(true) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/victorops/widget.go b/modules/victorops/widget.go index 735c3dcd..1fb79d2c 100644 --- a/modules/victorops/widget.go +++ b/modules/victorops/widget.go @@ -7,15 +7,6 @@ import ( "github.com/wtfutil/wtf/wtf" ) -// HelpText to display to users -const HelpText = ` - Keyboard commands for VictorOps - - /: Show/hide this help window - arrow down: Scroll down the list - arrow up: Scroll up the list -` - // Widget contains text info type Widget struct { wtf.TextWidget diff --git a/modules/weatherservices/weather/keyboard.go b/modules/weatherservices/weather/keyboard.go index c1db5727..76f2a555 100644 --- a/modules/weatherservices/weather/keyboard.go +++ b/modules/weatherservices/weather/keyboard.go @@ -3,10 +3,10 @@ package weather import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp) - widget.SetKeyboardChar("h", widget.Prev) - widget.SetKeyboardChar("l", widget.Next) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("h", widget.Prev, "Select previous item") + widget.SetKeyboardChar("l", widget.Next, "Select next item") - widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev) - widget.SetKeyboardKey(tcell.KeyRight, widget.Next) + widget.SetKeyboardKey(tcell.KeyLeft, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyRight, widget.Next, "Select next item") } diff --git a/modules/weatherservices/weather/widget.go b/modules/weatherservices/weather/widget.go index 458d08af..aca9af6d 100644 --- a/modules/weatherservices/weather/widget.go +++ b/modules/weatherservices/weather/widget.go @@ -6,20 +6,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Weather: - - /: Show/hide this help window - h: Previous weather location - l: Next weather location - - arrow left: Previous weather location - arrow right: Next weather location -` - // Widget is the container for weather data. type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.TextWidget @@ -33,8 +21,7 @@ type Widget struct { // NewWidget creates and returns a new instance of the weather Widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), TextWidget: wtf.NewTextWidget(app, settings.common, true), Idx: 0, @@ -45,7 +32,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) - widget.HelpfulWidget.SetView(widget.View) + widget.KeyboardWidget.SetView(widget.View) return &widget } diff --git a/modules/zendesk/keyboard.go b/modules/zendesk/keyboard.go index 0c59044c..73d36661 100644 --- a/modules/zendesk/keyboard.go +++ b/modules/zendesk/keyboard.go @@ -3,12 +3,13 @@ package zendesk import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { - widget.SetKeyboardChar("j", widget.Next) - widget.SetKeyboardChar("k", widget.Prev) - widget.SetKeyboardChar("o", widget.openTicket) + widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") + widget.SetKeyboardChar("j", widget.Next, "Select next item") + widget.SetKeyboardChar("k", widget.Prev, "Select previous item") + widget.SetKeyboardChar("o", widget.openTicket, "Open item") - widget.SetKeyboardKey(tcell.KeyDown, widget.Next) - widget.SetKeyboardKey(tcell.KeyUp, widget.Prev) - widget.SetKeyboardKey(tcell.KeyEnter, widget.openTicket) - widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect) + widget.SetKeyboardKey(tcell.KeyDown, widget.Next, "Select next item") + widget.SetKeyboardKey(tcell.KeyUp, widget.Prev, "Select previous item") + widget.SetKeyboardKey(tcell.KeyEnter, widget.openTicket, "Open item") + widget.SetKeyboardKey(tcell.KeyEsc, widget.Unselect, "Clear selection") } diff --git a/modules/zendesk/widget.go b/modules/zendesk/widget.go index 47a20ebf..cd05a60a 100644 --- a/modules/zendesk/widget.go +++ b/modules/zendesk/widget.go @@ -8,23 +8,8 @@ import ( "github.com/wtfutil/wtf/wtf" ) -const HelpText = ` - Keyboard commands for Zendesk: - - /: Show/hide this help window - j: Select the next item in the list - k: Select the previous item in the list - o: Open the selected item in a browser - - arrow down: Select the next item in the list - arrow up: Select the previous item in the list - - return: Open the selected item in a browser -` - // A Widget represents a Zendesk widget type Widget struct { - wtf.HelpfulWidget wtf.KeyboardWidget wtf.ScrollableWidget @@ -35,10 +20,9 @@ type Widget struct { // NewWidget creates a new instance of a widget func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ - HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), - KeyboardWidget: wtf.NewKeyboardWidget(), - ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), - + KeyboardWidget: wtf.NewKeyboardWidget(app, pages, settings.common), + ScrollableWidget: wtf.NewScrollableWidget(app, settings.common, true), + settings: settings, } @@ -46,6 +30,8 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) * widget.initializeKeyboardControls() widget.View.SetInputCapture(widget.InputCapture) + widget.KeyboardWidget.SetView(widget.View) + return &widget } diff --git a/wtf/helpful_widget.go b/wtf/helpful_widget.go deleted file mode 100644 index 3ca5807c..00000000 --- a/wtf/helpful_widget.go +++ /dev/null @@ -1,40 +0,0 @@ -package wtf - -import ( - "github.com/rivo/tview" -) - -type HelpfulWidget struct { - app *tview.Application - helpText string - pages *tview.Pages - view *tview.TextView -} - -func NewHelpfulWidget(app *tview.Application, pages *tview.Pages, helpText string) HelpfulWidget { - return HelpfulWidget{ - app: app, - helpText: helpText, - pages: pages, - } -} - -func (widget *HelpfulWidget) SetView(view *tview.TextView) { - widget.view = view -} - -func (widget *HelpfulWidget) ShowHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.view) - } - - modal := NewBillboardModal(widget.helpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - - widget.app.QueueUpdate(func() { - widget.app.Draw() - }) -} diff --git a/wtf/keyboard_widget.go b/wtf/keyboard_widget.go index 3c216fe5..b86bff82 100644 --- a/wtf/keyboard_widget.go +++ b/wtf/keyboard_widget.go @@ -1,20 +1,39 @@ package wtf import ( + "fmt" + "github.com/gdamore/tcell" + "github.com/rivo/tview" + "github.com/wtfutil/wtf/cfg" ) +type helpItem struct { + Key string + Text string +} + // KeyboardWidget manages keyboard control for a widget type KeyboardWidget struct { + app *tview.Application + pages *tview.Pages + view *tview.TextView + settings *cfg.Common + charMap map[string]func() keyMap map[tcell.Key]func() + helpMap []helpItem } // NewKeyboardWidget creates and returns a new instance of KeyboardWidget -func NewKeyboardWidget() KeyboardWidget { +func NewKeyboardWidget(app *tview.Application, pages *tview.Pages, settings *cfg.Common) KeyboardWidget { return KeyboardWidget{ - charMap: make(map[string]func()), - keyMap: make(map[tcell.Key]func()), + app: app, + pages: pages, + settings: settings, + charMap: make(map[string]func()), + keyMap: make(map[tcell.Key]func()), + helpMap: []helpItem{}, } } @@ -23,8 +42,9 @@ func NewKeyboardWidget() KeyboardWidget { // // widget.SetKeyboardChar("d", widget.deleteSelectedItem) // -func (widget *KeyboardWidget) SetKeyboardChar(char string, fn func()) { +func (widget *KeyboardWidget) SetKeyboardChar(char string, fn func(), helpText string) { widget.charMap[char] = fn + widget.helpMap = append(widget.helpMap, helpItem{char, helpText}) } // SetKeyboardKey sets a tcell.Key/function combination that responds to key presses @@ -32,8 +52,9 @@ func (widget *KeyboardWidget) SetKeyboardChar(char string, fn func()) { // // widget.SetKeyboardKey(tcell.KeyCtrlD, widget.deleteSelectedItem) // -func (widget *KeyboardWidget) SetKeyboardKey(key tcell.Key, fn func()) { +func (widget *KeyboardWidget) SetKeyboardKey(key tcell.Key, fn func(), helpText string) { widget.keyMap[key] = fn + widget.helpMap = append(widget.helpMap, helpItem{tcell.KeyNames[key], helpText}) } // InputCapture is the function passed to tview's SetInputCapture() function @@ -56,3 +77,34 @@ func (widget *KeyboardWidget) InputCapture(event *tcell.EventKey) *tcell.EventKe return event } + +func (widget *KeyboardWidget) helpText() string { + + str := "Keyboard commands for " + widget.settings.Module.Type + "\n\n" + + for _, item := range widget.helpMap { + str = str + fmt.Sprintf("%s: %s\n", item.Key, item.Text) + } + + return str +} + +func (widget *KeyboardWidget) SetView(view *tview.TextView) { + widget.view = view +} + +func (widget *KeyboardWidget) ShowHelp() { + closeFunc := func() { + widget.pages.RemovePage("help") + widget.app.SetFocus(widget.view) + } + + modal := NewBillboardModal(widget.helpText(), closeFunc) + + widget.pages.AddPage("help", modal, false, true) + widget.app.SetFocus(modal) + + widget.app.QueueUpdate(func() { + widget.app.Draw() + }) +} From cd35d1e0a3bdeebae4d4f086b8e01aacec5b979e Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Sat, 11 May 2019 19:40:24 -0400 Subject: [PATCH 2/4] Re-add command line help --- flags/flags.go | 14 +++++++++++++- help/help.go | 22 ++++++++++++++++++++++ main.go | 5 ++--- modules/datadog/widget.go | 4 ++++ modules/gerrit/widget.go | 4 ++++ modules/git/widget.go | 4 ++++ modules/github/widget.go | 4 ++++ modules/gitlab/widget.go | 4 ++++ modules/gitter/widget.go | 4 ++++ modules/mercurial/widget.go | 4 ++++ modules/nbascore/widget.go | 4 ++++ modules/spotify/widget.go | 4 ++++ modules/spotifyweb/widget.go | 4 ++++ modules/textfile/widget.go | 4 ++++ modules/todo/widget.go | 4 ++++ modules/todoist/widget.go | 4 ++++ modules/twitter/widget.go | 4 ++++ modules/weatherservices/weather/widget.go | 4 ++++ wtf/bargraph.go | 4 ++++ wtf/keyboard_widget.go | 4 ++-- wtf/text_widget.go | 4 ++++ wtf/wtfable.go | 1 + 22 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 help/help.go diff --git a/flags/flags.go b/flags/flags.go index 4eb856a3..1c3db2f1 100644 --- a/flags/flags.go +++ b/flags/flags.go @@ -6,11 +6,14 @@ import ( "path/filepath" goFlags "github.com/jessevdk/go-flags" + "github.com/olebedev/config" + "github.com/wtfutil/wtf/help" "github.com/wtfutil/wtf/utils" ) type Flags struct { Config string `short:"c" long:"config" optional:"yes" description:"Path to config file"` + Module string `short:"m" long:"module" optional:"yes" description:"Display info about a specific module, i.e.: 'wtf -m=todo'"` Profile bool `short:"p" long:"profile" optional:"yes" description:"Profile application memory usage"` Version bool `short:"v" long:"version" description:"Show version info"` } @@ -26,7 +29,12 @@ func (flags *Flags) ConfigFilePath() string { return flags.Config } -func (flags *Flags) Display(version string) { +func (flags *Flags) Display(version string, config *config.Config) { + if flags.HasModule() { + help.Display(flags.Module, config) + os.Exit(0) + } + if flags.HasVersion() { fmt.Println(version) os.Exit(0) @@ -37,6 +45,10 @@ func (flags *Flags) HasConfig() bool { return len(flags.Config) > 0 } +func (flags *Flags) HasModule() bool { + return len(flags.Module) > 0 +} + func (flags *Flags) HasVersion() bool { return flags.Version == true } diff --git a/help/help.go b/help/help.go new file mode 100644 index 00000000..9a7eae26 --- /dev/null +++ b/help/help.go @@ -0,0 +1,22 @@ +package help + +import ( + "fmt" + + //"github.com/wtfutil/wtf/cfg" + "github.com/olebedev/config" + "github.com/wtfutil/wtf/maker" +) + +func Display(moduleName string, config *config.Config) { + if moduleName == "" { + fmt.Println("\n --module takes a module name as an argument, i.e: '--module=github'") + } else { + fmt.Printf("%s\n", helpFor(moduleName, config)) + } +} + +func helpFor(moduleName string, config *config.Config) string { + widget := maker.MakeWidget(nil, nil, moduleName, moduleName, config, config) + return widget.HelpText() +} diff --git a/main.go b/main.go index 1b6cb4e3..6863a873 100644 --- a/main.go +++ b/main.go @@ -114,14 +114,13 @@ func main() { flags := flags.NewFlags() flags.Parse() - flags.Display(version) + config := cfg.LoadConfigFile(flags.ConfigFilePath()) + flags.Display(version, config) cfg.MigrateOldConfig() cfg.CreateConfigDir() cfg.CreateConfigFile() - config := cfg.LoadConfigFile(flags.ConfigFilePath()) - if flags.Profile { defer profile.Start(profile.MemProfile).Stop() } diff --git a/modules/datadog/widget.go b/modules/datadog/widget.go index a68a8be9..3ca489e0 100644 --- a/modules/datadog/widget.go +++ b/modules/datadog/widget.go @@ -64,6 +64,10 @@ func (widget *Widget) Render() { widget.Redraw(widget.CommonSettings.Title, content, false) } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) contentFrom(triggeredMonitors []datadog.Monitor) string { diff --git a/modules/gerrit/widget.go b/modules/gerrit/widget.go index 2aac5f5b..2e7d914f 100644 --- a/modules/gerrit/widget.go +++ b/modules/gerrit/widget.go @@ -90,6 +90,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) nextProject() { diff --git a/modules/git/widget.go b/modules/git/widget.go index a4f8d884..68f66fa4 100644 --- a/modules/git/widget.go +++ b/modules/git/widget.go @@ -85,6 +85,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) addCheckoutButton(form *tview.Form, fctn func()) { diff --git a/modules/github/widget.go b/modules/github/widget.go index 04dbe9e7..dbb1c8ec 100644 --- a/modules/github/widget.go +++ b/modules/github/widget.go @@ -67,6 +67,10 @@ func (widget *Widget) Prev() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) buildRepoCollection(repoData map[string]interface{}) []*GithubRepo { diff --git a/modules/gitlab/widget.go b/modules/gitlab/widget.go index 88fcd761..542e09b3 100644 --- a/modules/gitlab/widget.go +++ b/modules/gitlab/widget.go @@ -73,6 +73,10 @@ func (widget *Widget) Prev() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) buildProjectCollection(projectData map[string]interface{}) []*GitlabProject { diff --git a/modules/gitter/widget.go b/modules/gitter/widget.go index 95dc3037..5adfc4b4 100644 --- a/modules/gitter/widget.go +++ b/modules/gitter/widget.go @@ -64,6 +64,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) display() { diff --git a/modules/mercurial/widget.go b/modules/mercurial/widget.go index ed5b78e5..aeae8feb 100644 --- a/modules/mercurial/widget.go +++ b/modules/mercurial/widget.go @@ -79,6 +79,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) addCheckoutButton(form *tview.Form, fctn func()) { diff --git a/modules/nbascore/widget.go b/modules/nbascore/widget.go index 0cb8c457..a4a1867a 100644 --- a/modules/nbascore/widget.go +++ b/modules/nbascore/widget.go @@ -47,6 +47,10 @@ func (widget *Widget) Refresh() { widget.Redraw(widget.CommonSettings.Title, widget.nbascore(), false) } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + func (widget *Widget) nbascore() string { cur := time.Now().AddDate(0, 0, offset) // Go back/forward offset days curString := cur.Format("20060102") // Need 20060102 format to feed to api diff --git a/modules/spotify/widget.go b/modules/spotify/widget.go index dc6f8f69..2c2f77d9 100644 --- a/modules/spotify/widget.go +++ b/modules/spotify/widget.go @@ -55,6 +55,10 @@ func (w *Widget) Refresh() { w.render() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + func (w *Widget) render() { err := w.refreshSpotifyInfos() var content string diff --git a/modules/spotifyweb/widget.go b/modules/spotifyweb/widget.go index bf273f94..6cc6130f 100644 --- a/modules/spotifyweb/widget.go +++ b/modules/spotifyweb/widget.go @@ -165,6 +165,10 @@ func (w *Widget) Refresh() { } } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + func (w *Widget) createOutput() string { output := wtf.CenterText(fmt.Sprintf("[green]Now %v [white]\n", w.Info.Status), w.Width()) output += wtf.CenterText(fmt.Sprintf("[green]Title:[white] %v\n", w.Info.Title), w.Width()) diff --git a/modules/textfile/widget.go b/modules/textfile/widget.go index d91d57b7..1a02ec10 100644 --- a/modules/textfile/widget.go +++ b/modules/textfile/widget.go @@ -63,6 +63,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) display() { diff --git a/modules/todo/widget.go b/modules/todo/widget.go index aaf93bb3..e9498e40 100644 --- a/modules/todo/widget.go +++ b/modules/todo/widget.go @@ -65,6 +65,10 @@ func (widget *Widget) SetList(list checklist.Checklist) { widget.list = list } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ // edit opens a modal dialog that permits editing the text of the currently-selected item diff --git a/modules/todoist/widget.go b/modules/todoist/widget.go index 9d4fc2a4..a6dae460 100644 --- a/modules/todoist/widget.go +++ b/modules/todoist/widget.go @@ -77,6 +77,10 @@ func (w *Widget) Refresh() { w.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Keyboard Movement -------------------- */ // Down selects the next item in the list diff --git a/modules/twitter/widget.go b/modules/twitter/widget.go index e21b5de2..b0d782cf 100644 --- a/modules/twitter/widget.go +++ b/modules/twitter/widget.go @@ -54,6 +54,10 @@ func (widget *Widget) Refresh() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) display() { diff --git a/modules/weatherservices/weather/widget.go b/modules/weatherservices/weather/widget.go index aca9af6d..6f8f80ea 100644 --- a/modules/weatherservices/weather/widget.go +++ b/modules/weatherservices/weather/widget.go @@ -87,6 +87,10 @@ func (widget *Widget) Prev() { widget.display() } +func (widget *Widget) HelpText() string { + return widget.KeyboardWidget.HelpText() +} + /* -------------------- Unexported Functions -------------------- */ func (widget *Widget) apiKeyValid() bool { diff --git a/wtf/bargraph.go b/wtf/bargraph.go index 639d4b59..efc33709 100644 --- a/wtf/bargraph.go +++ b/wtf/bargraph.go @@ -112,6 +112,10 @@ func (widget *BarGraph) TextView() *tview.TextView { return widget.View } +func (widget *BarGraph) HelpText() string { + return "No help available for this widget" +} + /* -------------------- Unexported Functions -------------------- */ func (widget *BarGraph) addView() *tview.TextView { diff --git a/wtf/keyboard_widget.go b/wtf/keyboard_widget.go index b86bff82..ff0aeed5 100644 --- a/wtf/keyboard_widget.go +++ b/wtf/keyboard_widget.go @@ -78,7 +78,7 @@ func (widget *KeyboardWidget) InputCapture(event *tcell.EventKey) *tcell.EventKe return event } -func (widget *KeyboardWidget) helpText() string { +func (widget *KeyboardWidget) HelpText() string { str := "Keyboard commands for " + widget.settings.Module.Type + "\n\n" @@ -99,7 +99,7 @@ func (widget *KeyboardWidget) ShowHelp() { widget.app.SetFocus(widget.view) } - modal := NewBillboardModal(widget.helpText(), closeFunc) + modal := NewBillboardModal(widget.HelpText(), closeFunc) widget.pages.AddPage("help", modal, false, true) widget.app.SetFocus(modal) diff --git a/wtf/text_widget.go b/wtf/text_widget.go index a6016ca4..0b68b64c 100644 --- a/wtf/text_widget.go +++ b/wtf/text_widget.go @@ -119,6 +119,10 @@ func (widget *TextWidget) Redraw(title, text string, wrap bool) { }) } +func (widget *TextWidget) HelpText() string { + return fmt.Sprintf("\n There is no help available for this widget") +} + /* -------------------- Unexported Functions -------------------- */ func (widget *TextWidget) addView() *tview.TextView { diff --git a/wtf/wtfable.go b/wtf/wtfable.go index f6c50aad..ba8fe17a 100644 --- a/wtf/wtfable.go +++ b/wtf/wtfable.go @@ -14,6 +14,7 @@ type Wtfable interface { Name() string SetFocusChar(string) TextView() *tview.TextView + HelpText() string Height() int Left() int From 9b8ce06990c7f9b7c4a4e18f2d89defa58260bc1 Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Sat, 11 May 2019 19:55:03 -0400 Subject: [PATCH 3/4] Split out char/key mapping help This makes help more inline with previous instances Wrap everything in `[]`, so keys like ` ` show up correctly Pad characters for keypresses, so things have pretty alignment --- wtf/keyboard_widget.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/wtf/keyboard_widget.go b/wtf/keyboard_widget.go index ff0aeed5..aebe85e9 100644 --- a/wtf/keyboard_widget.go +++ b/wtf/keyboard_widget.go @@ -20,9 +20,11 @@ type KeyboardWidget struct { view *tview.TextView settings *cfg.Common - charMap map[string]func() - keyMap map[tcell.Key]func() - helpMap []helpItem + charMap map[string]func() + keyMap map[tcell.Key]func() + charHelp []helpItem + keyHelp []helpItem + maxKey int } // NewKeyboardWidget creates and returns a new instance of KeyboardWidget @@ -33,7 +35,8 @@ func NewKeyboardWidget(app *tview.Application, pages *tview.Pages, settings *cfg settings: settings, charMap: make(map[string]func()), keyMap: make(map[tcell.Key]func()), - helpMap: []helpItem{}, + charHelp: []helpItem{}, + keyHelp: []helpItem{}, } } @@ -44,7 +47,7 @@ func NewKeyboardWidget(app *tview.Application, pages *tview.Pages, settings *cfg // func (widget *KeyboardWidget) SetKeyboardChar(char string, fn func(), helpText string) { widget.charMap[char] = fn - widget.helpMap = append(widget.helpMap, helpItem{char, helpText}) + widget.charHelp = append(widget.charHelp, helpItem{char, helpText}) } // SetKeyboardKey sets a tcell.Key/function combination that responds to key presses @@ -54,7 +57,10 @@ func (widget *KeyboardWidget) SetKeyboardChar(char string, fn func(), helpText s // func (widget *KeyboardWidget) SetKeyboardKey(key tcell.Key, fn func(), helpText string) { widget.keyMap[key] = fn - widget.helpMap = append(widget.helpMap, helpItem{tcell.KeyNames[key], helpText}) + widget.keyHelp = append(widget.keyHelp, helpItem{tcell.KeyNames[key], helpText}) + if len(tcell.KeyNames[key]) > widget.maxKey { + widget.maxKey = len(tcell.KeyNames[key]) + } } // InputCapture is the function passed to tview's SetInputCapture() function @@ -82,8 +88,13 @@ func (widget *KeyboardWidget) HelpText() string { str := "Keyboard commands for " + widget.settings.Module.Type + "\n\n" - for _, item := range widget.helpMap { - str = str + fmt.Sprintf("%s: %s\n", item.Key, item.Text) + for _, item := range widget.charHelp { + str = str + fmt.Sprintf(" [%s]: %s\n", item.Key, item.Text) + } + str = str + "\n\n" + + for _, item := range widget.keyHelp { + str = str + fmt.Sprintf(" [%-*s]: %s\n", widget.maxKey, item.Key, item.Text) } return str From 46c31103b845405c1cb114daaec8b5016f18eebe Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Sat, 11 May 2019 20:00:35 -0400 Subject: [PATCH 4/4] Make widget name part of the output --- wtf/text_widget.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wtf/text_widget.go b/wtf/text_widget.go index 0b68b64c..e13298bd 100644 --- a/wtf/text_widget.go +++ b/wtf/text_widget.go @@ -120,7 +120,7 @@ func (widget *TextWidget) Redraw(title, text string, wrap bool) { } func (widget *TextWidget) HelpText() string { - return fmt.Sprintf("\n There is no help available for this widget") + return fmt.Sprintf("\n There is no help available for widget %s", widget.CommonSettings.Module.Type) } /* -------------------- Unexported Functions -------------------- */