"io/ioutil"
"os"
"strings"
-
- "github.com/mitchellh/go-homedir"
)
var pluginCompletions []func(string) []string
var files []os.FileInfo
var err error
if len(dirs) > 1 {
- home, _ := homedir.Dir()
-
directories := strings.Join(dirs[:len(dirs)-1], sep) + sep
- if strings.HasPrefix(directories, "~") {
- directories = strings.Replace(directories, "~", home, 1)
- }
+ directories = ReplaceHome(directories)
files, err = ioutil.ReadDir(directories)
} else {
files, err = ioutil.ReadDir(".")
return chosen, suggestions
}
+// OptionValueComplete completes values for various options
+func OptionValueComplete(inputOpt, input string) (string, []string) {
+ inputOpt = strings.TrimSpace(inputOpt)
+ var suggestions []string
+ localSettings := DefaultLocalSettings()
+ var optionVal interface{}
+ for k, option := range globalSettings {
+ if k == inputOpt {
+ optionVal = option
+ }
+ }
+ for k, option := range localSettings {
+ if k == inputOpt {
+ optionVal = option
+ }
+ }
+
+ switch optionVal.(type) {
+ case bool:
+ if strings.HasPrefix("on", input) {
+ suggestions = append(suggestions, "on")
+ } else if strings.HasPrefix("true", input) {
+ suggestions = append(suggestions, "true")
+ }
+ if strings.HasPrefix("off", input) {
+ suggestions = append(suggestions, "off")
+ } else if strings.HasPrefix("false", input) {
+ suggestions = append(suggestions, "false")
+ }
+ case string:
+ switch inputOpt {
+ case "colorscheme":
+ _, suggestions = ColorschemeComplete(input)
+ case "fileformat":
+ if strings.HasPrefix("unix", input) {
+ suggestions = append(suggestions, "unix")
+ }
+ if strings.HasPrefix("dos", input) {
+ suggestions = append(suggestions, "dos")
+ }
+ case "sucmd":
+ if strings.HasPrefix("sudo", input) {
+ suggestions = append(suggestions, "sudo")
+ }
+ if strings.HasPrefix("doas", input) {
+ suggestions = append(suggestions, "doas")
+ }
+ }
+ }
+
+ var chosen string
+ if len(suggestions) == 1 {
+ chosen = suggestions[0]
+ }
+ return chosen, suggestions
+}
+
// MakeCompletion registers a function from a plugin for autocomplete commands
func MakeCompletion(function string) Completion {
pluginCompletions = append(pluginCompletions, LuaFunctionComplete(function))
return
}
+// PluginCmdComplete completes with possible choices for the `> plugin` command
func PluginCmdComplete(input string) (chosen string, suggestions []string) {
for _, cmd := range []string{"install", "remove", "search", "update", "list"} {
if strings.HasPrefix(cmd, input) {
return chosen, suggestions
}
+// PluginnameComplete completes with the names of loaded plugins
func PluginNameComplete(input string) (chosen string, suggestions []string) {
for _, pp := range GetAllPluginPackages() {
if strings.HasPrefix(pp.Name, input) {