Skip to content
Snippets Groups Projects

Improve usability and better output formatting for gosndc

Merged Malte Bauch requested to merge cli-refactoring-pterm into develop
2 files
+ 23
12
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 19
12
@@ -47,7 +47,9 @@ import (
// PromptCompleter provides completion for a device
type PromptCompleter struct {
yangSchemaCompleterMap map[uuid.UUID]*completer.YangSchemaCompleter
yangSchemaCompleterMap map[uuid.UUID]*completer.YangSchemaCompleter
currentDeviceSuggestions []prompt.Suggest
history []string
}
// NewPromptCompleter returns a new promptCompleter
@@ -76,6 +78,8 @@ func (pc *PromptCompleter) Run() {
prompt.OptionPrefixTextColor(prompt.Cyan),
prompt.OptionCompletionWordSeparator(completer.YangSchemaCompletionSeperator),
prompt.OptionShowCompletionAtStart(),
prompt.OptionCompletionOnDown(),
prompt.OptionHistory(pc.history),
prompt.OptionSuggestionBGColor(prompt.DarkGray),
prompt.OptionSuggestionTextColor(prompt.LightGray),
prompt.OptionDescriptionTextColor(prompt.DarkGray),
@@ -128,11 +132,11 @@ func filterFlagSlice(input []string) (commandSlice []string, flagSlice []string)
func deviceGetCompletion(c *PromptCompleter, d prompt.Document, inputSplit []string) []prompt.Suggest {
switch inputLen := len(inputSplit); inputLen {
case 2:
return devicePrompt(d)
return devicePrompt(c, d)
case 3:
id, err := uuid.Parse(inputSplit[inputLen-1])
if err != nil {
return devicePrompt(d)
return devicePrompt(c, d)
}
if c, ok := c.yangSchemaCompleterMap[id]; ok {
return c.Complete(d)
@@ -151,7 +155,7 @@ func deviceGetCompletion(c *PromptCompleter, d prompt.Document, inputSplit []str
}
id, err := uuid.Parse(inputSplit[inputLen-2])
if err != nil {
return devicePrompt(d)
return devicePrompt(c, d)
}
if yc, ok := c.yangSchemaCompleterMap[id]; ok {
return yc.Complete(d)
@@ -162,15 +166,15 @@ func deviceGetCompletion(c *PromptCompleter, d prompt.Document, inputSplit []str
return []prompt.Suggest{}
}
func devicePrompt(d prompt.Document) []prompt.Suggest {
spinner, _ := pterm.DefaultSpinner.Start("Requesting devices from controller.")
devices, err := getDevices()
if err != nil {
spinner.Fail(err)
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
func devicePrompt(c *PromptCompleter, d prompt.Document) []prompt.Suggest {
if c.currentDeviceSuggestions == nil {
var err error
c.currentDeviceSuggestions, err = getDevices()
if err != nil {
return prompt.FilterHasPrefix(c.currentDeviceSuggestions, d.GetWordBeforeCursor(), true)
}
}
spinner.Success()
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
return prompt.FilterHasPrefix(c.currentDeviceSuggestions, d.GetWordBeforeCursor(), true)
}
func cobraCommandCompletion(currCmd *cobra.Command, d prompt.Document, inputFlags []string, loaded []prompt.Suggest) []prompt.Suggest {
@@ -204,6 +208,9 @@ func completionBasedOnCmd(c *PromptCompleter, cmd *cobra.Command, inputSplit []s
case deviceShowCmd:
devices, _ := getDevices()
return devices
case deviceCmd:
c.currentDeviceSuggestions = nil
return cobraCommandCompletion(cmd, d, inputFlags, []prompt.Suggest{})
default:
return cobraCommandCompletion(cmd, d, inputFlags, []prompt.Suggest{})
}
Loading