mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Add more 'man page' like functionality
This commit is contained in:
parent
9a877b5e04
commit
d8f337884f
@ -51,15 +51,15 @@ type Sigils struct {
|
||||
type Common struct {
|
||||
Colors
|
||||
Module
|
||||
Position
|
||||
Position `help:"Defines where in the grid this module’s widget will be displayed."`
|
||||
Sigils
|
||||
|
||||
Enabled bool
|
||||
RefreshInterval int
|
||||
Enabled bool `help:"Determines whether or not this module is executed and if its data displayed onscreen." values:"true, false"`
|
||||
RefreshInterval int `help:"How often, in seconds, this module will update its data." values:"A positive integer, 0..n." optional:"true"`
|
||||
Title string
|
||||
Config *config.Config
|
||||
|
||||
focusChar int
|
||||
focusChar int `help:"Define one of the number keys as a short cut key to access the widget." optional:"true"`
|
||||
}
|
||||
|
||||
func NewCommonSettingsFromModule(name, defaultTitle string, moduleConfig *config.Config, globalSettings *config.Config) *Common {
|
||||
|
@ -3,9 +3,9 @@ package help
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
//"github.com/wtfutil/wtf/cfg"
|
||||
"github.com/olebedev/config"
|
||||
"github.com/wtfutil/wtf/maker"
|
||||
"github.com/wtfutil/wtf/utils"
|
||||
)
|
||||
|
||||
func Display(moduleName string, config *config.Config) {
|
||||
@ -18,5 +18,8 @@ func Display(moduleName string, config *config.Config) {
|
||||
|
||||
func helpFor(moduleName string, config *config.Config) string {
|
||||
widget := maker.MakeWidget(nil, nil, moduleName, moduleName, config, config)
|
||||
return widget.HelpText()
|
||||
result := ""
|
||||
result += utils.StripColorTags(widget.HelpText())
|
||||
result += widget.ConfigText()
|
||||
return result
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package git
|
||||
import (
|
||||
"github.com/olebedev/config"
|
||||
"github.com/wtfutil/wtf/cfg"
|
||||
"github.com/wtfutil/wtf/utils"
|
||||
)
|
||||
|
||||
const defaultTitle = "Git"
|
||||
@ -10,10 +11,10 @@ const defaultTitle = "Git"
|
||||
type Settings struct {
|
||||
common *cfg.Common
|
||||
|
||||
commitCount int
|
||||
commitFormat string
|
||||
dateFormat string
|
||||
repositories []interface{}
|
||||
commitCount int `help:"The number of past commits to display." values:"A positive integer, 0..n."`
|
||||
commitFormat string `help:"The string format for the commit message." optional:"true"`
|
||||
dateFormat string `help:"The string format for the date/time in the commit message." optional:"true"`
|
||||
repositories []interface{} `help:"Defines which git repositories to watch." values:"A list of zero or more local file paths pointing to valid git repositories."`
|
||||
}
|
||||
|
||||
func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings {
|
||||
@ -29,3 +30,11 @@ func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *co
|
||||
|
||||
return &settings
|
||||
}
|
||||
|
||||
func (widget *Widget) ConfigText() string {
|
||||
return utils.HelpFromInterface(Settings{})
|
||||
}
|
||||
|
||||
func (widget *Widget) HelpText() string {
|
||||
return widget.KeyboardWidget.HelpText()
|
||||
}
|
||||
|
@ -85,10 +85,6 @@ 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()) {
|
||||
|
77
utils/help_parser.go
Normal file
77
utils/help_parser.go
Normal file
@ -0,0 +1,77 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"unicode"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/wtfutil/wtf/cfg"
|
||||
)
|
||||
|
||||
func lowercaseTitle(title string) string {
|
||||
if title == "" {
|
||||
return ""
|
||||
}
|
||||
r, n := utf8.DecodeRuneInString(title)
|
||||
return string(unicode.ToLower(r)) + title[n:]
|
||||
}
|
||||
|
||||
var (
|
||||
openColorRegex = regexp.MustCompile(`\[.*?\]`)
|
||||
)
|
||||
|
||||
func StripColorTags(input string) string {
|
||||
return openColorRegex.ReplaceAllString(input, "")
|
||||
}
|
||||
|
||||
func helpFromValue(field reflect.StructField) string {
|
||||
result := ""
|
||||
var help string = field.Tag.Get("help")
|
||||
optional, err := strconv.ParseBool(field.Tag.Get("optional"))
|
||||
if err != nil {
|
||||
optional = false
|
||||
}
|
||||
var values string = field.Tag.Get("values")
|
||||
if optional {
|
||||
help = "Optional " + help
|
||||
}
|
||||
if help != "" {
|
||||
result += "\n\n" + lowercaseTitle(field.Name)
|
||||
result += "\n" + help
|
||||
if values != "" {
|
||||
result += "\nValues: " + values
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func HelpFromInterface(item interface{}) string {
|
||||
|
||||
result := ""
|
||||
t := reflect.TypeOf(item)
|
||||
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
field := t.Field(i)
|
||||
|
||||
kind := field.Type.Kind()
|
||||
if field.Type.Kind() == reflect.Ptr {
|
||||
kind = field.Type.Elem().Kind()
|
||||
}
|
||||
|
||||
if field.Name == "common" {
|
||||
result += HelpFromInterface(cfg.Common{})
|
||||
}
|
||||
|
||||
switch kind {
|
||||
case reflect.Interface:
|
||||
result += HelpFromInterface(field.Type.Elem())
|
||||
default:
|
||||
result += helpFromValue(field)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
@ -116,6 +116,10 @@ func (widget *BarGraph) HelpText() string {
|
||||
return "No help available for this widget"
|
||||
}
|
||||
|
||||
func (widget *BarGraph) ConfigText() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
/* -------------------- Unexported Functions -------------------- */
|
||||
|
||||
func (widget *BarGraph) addView() *tview.TextView {
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/rivo/tview"
|
||||
"github.com/wtfutil/wtf/cfg"
|
||||
"github.com/wtfutil/wtf/utils"
|
||||
)
|
||||
|
||||
type TextWidget struct {
|
||||
@ -123,6 +124,10 @@ func (widget *TextWidget) HelpText() string {
|
||||
return fmt.Sprintf("\n There is no help available for widget %s", widget.CommonSettings.Module.Type)
|
||||
}
|
||||
|
||||
func (widget *TextWidget) ConfigText() string {
|
||||
return utils.HelpFromInterface(cfg.Common{})
|
||||
}
|
||||
|
||||
/* -------------------- Unexported Functions -------------------- */
|
||||
|
||||
func (widget *TextWidget) addView() *tview.TextView {
|
||||
|
@ -15,6 +15,7 @@ type Wtfable interface {
|
||||
SetFocusChar(string)
|
||||
TextView() *tview.TextView
|
||||
HelpText() string
|
||||
ConfigText() string
|
||||
|
||||
Height() int
|
||||
Left() int
|
||||
|
Loading…
x
Reference in New Issue
Block a user