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