Documentation
¶
Index ¶
- Constants
- Variables
- func Errorln(text ...string)
- func FgColor(red int, green int, blue int) string
- func GetValueFromString(argType ArgType, value string) (any, error)
- func MatchesOneOf(oneOf []any, sample any) bool
- func PadRight(text string, width int) string
- func Println(text ...string)
- func Sprintf(text ...string) string
- type ArgMap
- func (m ArgMap) GetBool(argName string) bool
- func (m ArgMap) GetFloat(argName string) float64
- func (m ArgMap) GetFloatArray(argName string) []float64
- func (m ArgMap) GetInt(argName string) int
- func (m ArgMap) GetIntArray(argName string) []int
- func (m ArgMap) GetString(argName string) string
- func (m ArgMap) GetStringArray(argName string) []string
- type ArgType
- type Argument
- type BoundExec
- type Capture
- type Command
- func (c *Command) ClassifyTokens(tokens []string, parentFlags []*Flag) (map[string]any, error)
- func (c *Command) GetHelpString(parentFlags []*Flag) string
- func (c *Command) Suggest(tokens []string, parentFlags []*Flag) *ns.Suggestions
- func (c *Command) Validate(parentFlags map[string]struct{}) error
- type Commander
- type Completer
- type Config
- type Flag
- func (f *Flag) GetInvocation() string
- func (f *Flag) GetPaddedInvocation() string
- func (f *Flag) GetValueFromString(value string) (any, error)
- func (f *Flag) PopulateDefault(target map[string]any) error
- func (f *Flag) PopulateMap(value string, target map[string]any) error
- func (f *Flag) SuggestValues(prefix string) *ns.Suggestions
- func (f *Flag) Validate() error
- type TokenGroup
Constants ¶
const ( PatternArg string = "pattern" InsensitiveArg string = "insensitive" )
const (
COMMAND_PADDING = 30
)
Variables ¶
var ( C_RESET = "\x1b[0m" C_RED = FgColor(255, 0, 0) C_GREEN = FgColor(0, 255, 0) C_BOLD = "\x1b[1m" )
var ( FLOW_CONTROL_UNSPECIFIED byte = ' ' FLOW_CONTROL_PIPE byte = '|' FLOW_CONTROL_REDIRECT byte = '>' )
var ClearCommand = &Command{ Name: "clear", Description: "clear the terminal", OnExecute: func(c *Command, args ArgMap, capturedInput []byte) error { termutils.ClearTerminal() termutils.SetCursorPos(1, 1) return nil }, }
var ControlCharacters = map[byte]struct{}{ FLOW_CONTROL_PIPE: {}, FLOW_CONTROL_REDIRECT: {}, }
var ExitCommand = &Command{ Name: "exit", Description: "exit the shell", OnExecute: func(c *Command, args ArgMap, capturedInput []byte) error { return ns.ErrEof }, }
var GrepCommand = &Command{ Name: "grep", Description: "filter and pattern match input", Arguments: []*Argument{ { Name: PatternArg, Description: "search pattern", ArgType: ArgTypeString, }, }, Flags: []*Flag{ { Name: InsensitiveArg, ShortName: "i", Description: "case insensitive matching", ArgType: ArgTypeBool, DefaultValue: false, }, }, OnExecute: func(c *Command, args ArgMap, capturedInput []byte) error { pattern := args.GetString(PatternArg) insensitive := args.GetBool(InsensitiveArg) lowerPattern := strings.ToLower(pattern) if len(capturedInput) > 0 { ci := string(capturedInput) lines := strings.Split(ci, "\n") for _, line := range lines { if insensitive { if !strings.Contains(strings.ToLower(line), lowerPattern) { continue } } else if !strings.Contains(line, pattern) { continue } fmt.Println(line) } } return nil }, }
var HelpCommand = &Command{ Name: "help", Description: "display contextual command help", OnExecute: func(c *Command, args ArgMap, capturedInput []byte) error { fmt.Println("Command list:") commandList := []string{} for _, cmd := range c.Commander.commandMap { commandList = append(commandList, cmd.Name) } sort.Slice(commandList, func(i, j int) bool { return commandList[i] < commandList[j] }) for _, cmdName := range commandList { cmd := c.Commander.commandMap[cmdName] fmt.Printf(" %s%s\n", PadRight(cmd.Name, COMMAND_PADDING), cmd.Description) } return nil }, }
Functions ¶
func MatchesOneOf ¶
Types ¶
type ArgMap ¶ added in v0.2.0
func (ArgMap) GetFloatArray ¶ added in v0.2.0
func (ArgMap) GetIntArray ¶ added in v0.2.0
func (ArgMap) GetStringArray ¶ added in v0.2.0
type ArgType ¶
type ArgType string
func InferArgType ¶
InferArgType infers the ArgType based on the variable type, or returns ArgTypeUnspecified if the variable type does not match one of the known values.
type Argument ¶
type Argument struct {
Name string
Description string
ArgType ArgType
AllowMultiple bool // if enabled, will be returned as an array of ArgType
OneOf []any // if specified, value must belong to collection
Completer Completer
}
an argument represents a positional argument. it is non-defaultable
func (*Argument) GetValueFromString ¶
GetValueFromString parses the provided value according to the argument's underlying data type and returns that parsed value, or an error
func (*Argument) PopulateMap ¶
func (*Argument) SuggestValues ¶
func (a *Argument) SuggestValues(prefix string) *ns.Suggestions
type Command ¶
type Command struct {
Name string
Description string
Flags []*Flag
Arguments []*Argument
SubCommands []*Command
OnExecute func(c *Command, args ArgMap, capturedInput []byte) error
Commander *Commander
// contains filtered or unexported fields
}
func (*Command) ClassifyTokens ¶
ClassifyTokens attempts to classify the token array using the defined flags and arguments, in order to populate a name to value mapping
func (*Command) GetHelpString ¶
type Commander ¶
type Commander struct {
Config Config
// contains filtered or unexported fields
}
func NewCommander ¶
NewCommander returns a new Commander instance
func (*Commander) LocateCommand ¶
LocateCommand will attempt to locate a command from a series of tokens presented as arguments to the Commander. The method will match up to either the final subcommand, returning the remaining arguments, or to the final matching subcommand, returning whatever unmatched is left.
type Completer ¶
type Completer func(search string) *ns.Suggestions
Completer is a type of function which returns a list of strings based on a search string
type Flag ¶
type Flag struct {
Name string
ShortName string
Description string
ArgType ArgType
AllowMultiple bool // if enabled, will be returned as an array of ArgType
DefaultValue any
OneOf []any // if specified, value must belong to collection
Completer Completer
IsRequired bool
}
func (*Flag) GetInvocation ¶
func (*Flag) GetPaddedInvocation ¶
func (*Flag) GetValueFromString ¶
GetValueFromString parses the provided value according to the flag's underlying data type and returns that parsed value, or an error
func (*Flag) SuggestValues ¶
func (f *Flag) SuggestValues(prefix string) *ns.Suggestions
type TokenGroup ¶
func Tokenize ¶
func Tokenize(line string) []*TokenGroup
