From 9d85aa5417405fe634693275f3d0c0900e4e09a5 Mon Sep 17 00:00:00 2001 From: rsteube Date: Mon, 5 Oct 2020 19:05:28 +0200 Subject: [PATCH] updated carapace to 0.1.0 probably breaks some stuff due to changes to carapace - moved actions to /actions - updated multipart actions for new api - fixed docker containers - temporary disabled docker root subcommand completion (simply additionally registering them to rootCmd breaks completion) --- Dockerfile | 5 +- actions/fs/fs.go | 27 ++++++ actions/net/net.go | 47 +++++++++++ actions/os/os.go | 48 +++++++++-- carapace/cmd/completers.go | 7 +- completers/chgrp_completer/cmd/root.go | 3 +- completers/chown_completer/cmd/root.go | 5 +- completers/chroot_completer/cmd/root.go | 5 +- completers/chsh_completer/cmd/root.go | 14 +--- .../docker-compose_completer/cmd/exec.go | 3 +- .../docker-compose_completer/cmd/kill.go | 3 +- .../docker_completer/cmd/action/action.go | 20 ++--- .../docker_completer/cmd/container_create.go | 5 +- .../docker_completer/cmd/container_exec.go | 3 +- .../docker_completer/cmd/container_kill.go | 3 +- .../docker_completer/cmd/container_run.go | 5 +- completers/docker_completer/cmd/root.go | 83 ++++++++++--------- .../docker_completer/cmd/service_create.go | 5 +- .../docker_completer/cmd/service_update.go | 5 +- completers/env_completer/cmd/root.go | 6 +- completers/id_completer/cmd/root.go | 3 +- completers/install_completer/cmd/root.go | 5 +- completers/mkdir_completer/cmd/root.go | 4 +- completers/pinky_completer/cmd/root.go | 3 +- completers/pkill_completer/cmd/root.go | 6 +- completers/sudo_completer/cmd/root.go | 6 +- completers/tar_completer/cmd/root.go | 5 +- go.mod | 2 +- go.sum | 8 ++ 29 files changed, 234 insertions(+), 110 deletions(-) create mode 100644 actions/fs/fs.go create mode 100644 actions/net/net.go diff --git a/Dockerfile b/Dockerfile index a64c6be815..8c9a62f60a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,8 @@ RUN wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod && dpkg -i packages-microsoft-prod.deb \ && apt-get update -RUN apt-get install -y fish \ +RUN apt-get install -y bash-completion \ + fish \ elvish \ powershell \ python3-pip \ @@ -17,6 +18,7 @@ RUN ln -s /carapace-bin/carapace/carapace /usr/local/bin/carapace # bash RUN echo "\n\ PS1=$'\e[0;36mcarapace \e[0m'\n\ +source /usr/share/bash-completion/bash_completion \n\ source <(carapace _carapace bash)\n\ for c in \$(carapace --list); do\n\ source <(carapace \$c)\n\ @@ -65,6 +67,7 @@ RUN curl https://www.oilshell.org/download/oil-0.8.0.tar.gz | tar -xvz \ RUN mkdir -p ~/.config/oil \ && echo "\n\ PS1=$'\e[0;36mcarapace \e[0m'\n\ +source /usr/share/bash-completion/bash_completion \n\ source <(carapace _carapace)\n\ for c in \$(carapace --list); do\n\ source <(carapace \$c)\n\ diff --git a/actions/fs/fs.go b/actions/fs/fs.go new file mode 100644 index 0000000000..917b1a4d8c --- /dev/null +++ b/actions/fs/fs.go @@ -0,0 +1,27 @@ +package fs + +import ( + "os/exec" + "regexp" + "strings" + + "github.com/rsteube/carapace" +) + +func ActionMounts() carapace.Action { + return carapace.ActionCallback(func(args []string) carapace.Action { + if output, err := exec.Command("mount").Output(); err != nil { + return carapace.ActionMessage(err.Error()) + } else { + re := regexp.MustCompile(`^(?P\S+) on (?P\S+) type (?P\S+) (?P.+)`) + mounts := make([]string, 0) + for _, line := range strings.Split(string(output),"\n") { + if re.MatchString(line) { + matches := re.FindStringSubmatch(line) + mounts = append(mounts, matches[2], matches[1]) + } + } + return carapace.ActionValuesDescribed(mounts...) + } + }) +} diff --git a/actions/net/net.go b/actions/net/net.go new file mode 100644 index 0000000000..4de6650471 --- /dev/null +++ b/actions/net/net.go @@ -0,0 +1,47 @@ +package net + +import ( + "io/ioutil" + "os/exec" + "regexp" + "strings" + + "github.com/mitchellh/go-homedir" + + "github.com/rsteube/carapace" +) + +func ActionHosts() carapace.Action { + return carapace.ActionCallback(func(args []string) carapace.Action { + hosts := []string{} + if file, err := homedir.Expand("~/.ssh/known_hosts"); err == nil { + if content, err := ioutil.ReadFile(file); err == nil { + r := regexp.MustCompile(`^(?P[^ ,#]+)`) + for _, entry := range strings.Split(string(content), "\n") { + if r.MatchString(entry) { + hosts = append(hosts, r.FindStringSubmatch(entry)[0]) + } + } + } else { + return carapace.ActionMessage(err.Error()) + } + } + return carapace.ActionValues(hosts...) + }) +} + +func ActionNetInterfaces() carapace.Action { + return carapace.ActionCallback(func(args []string) carapace.Action { + if output, err := exec.Command("ifconfig").Output(); err != nil { + return carapace.ActionMessage(err.Error()) + } else { + interfaces := []string{} + for _, line := range strings.Split(string(output), "\n") { + if matches, _ := regexp.MatchString("^[0-9a-zA-Z]", line); matches { + interfaces = append(interfaces, strings.Split(line, ":")[0]) + } + } + return carapace.ActionValues(interfaces...) + } + }) +} diff --git a/actions/os/os.go b/actions/os/os.go index 071f83993a..76815eb7fe 100644 --- a/actions/os/os.go +++ b/actions/os/os.go @@ -3,6 +3,7 @@ package os import ( "io/ioutil" "os" + "os/exec" "strings" ps "github.com/mitchellh/go-ps" @@ -26,13 +27,17 @@ func ActionGroups() carapace.Action { groups := []string{} if content, err := ioutil.ReadFile("/etc/group"); err == nil { for _, entry := range strings.Split(string(content), "\n") { - group := strings.Split(entry, ":")[0] - if len(strings.TrimSpace(group)) > 0 { - groups = append(groups, group) + splitted := strings.Split(entry, ":") + if len(splitted) > 2 { + group := splitted[0] + id := splitted[2] + if len(strings.TrimSpace(group)) > 0 { + groups = append(groups, group, id) + } } } } - return carapace.ActionValues(groups...) + return carapace.ActionValuesDescribed(groups...) }) } @@ -105,12 +110,39 @@ func ActionUsers() carapace.Action { users := []string{} if content, err := ioutil.ReadFile("/etc/passwd"); err == nil { for _, entry := range strings.Split(string(content), "\n") { - user := strings.Split(entry, ":")[0] - if len(strings.TrimSpace(user)) > 0 { - users = append(users, user) + splitted := strings.Split(entry, ":") + if len(splitted) > 2 { + user := splitted[0] + id := splitted[2] + if len(strings.TrimSpace(user)) > 0 { + users = append(users, user, id) + } } } } - return carapace.ActionValues(users...) + return carapace.ActionValuesDescribed(users...) + }) +} + +func ActionUserGroup() carapace.Action { + return carapace.ActionMultiParts(":", func(args []string, parts []string) carapace.Action { + switch len(parts) { + case 0: + return ActionUsers().Suffix(":", args) + case 1: + return ActionGroups() + default: + return carapace.ActionValues() + } + }) +} + +func ActionShells() carapace.Action { + return carapace.ActionCallback(func(args []string) carapace.Action { + if output, err := exec.Command("chsh", "--list-shells").Output(); err != nil { + return carapace.ActionMessage(err.Error()) + } else { + return carapace.ActionValues(strings.Split(string(output), "\n")...) + } }) } diff --git a/carapace/cmd/completers.go b/carapace/cmd/completers.go index b07d4cee41..1c3b55a03f 100644 --- a/carapace/cmd/completers.go +++ b/carapace/cmd/completers.go @@ -18,11 +18,11 @@ import ( cut "github.com/rsteube/carapace-bin/completers/cut_completer/cmd" date "github.com/rsteube/carapace-bin/completers/date_completer/cmd" df "github.com/rsteube/carapace-bin/completers/df_completer/cmd" - dir "github.com/rsteube/carapace-bin/completers/dir_completer/cmd" dircolors "github.com/rsteube/carapace-bin/completers/dircolors_completer/cmd" + dir "github.com/rsteube/carapace-bin/completers/dir_completer/cmd" dirname "github.com/rsteube/carapace-bin/completers/dirname_completer/cmd" - docker_compose "github.com/rsteube/carapace-bin/completers/docker-compose_completer/cmd" docker "github.com/rsteube/carapace-bin/completers/docker_completer/cmd" + docker_compose "github.com/rsteube/carapace-bin/completers/docker-compose_completer/cmd" du "github.com/rsteube/carapace-bin/completers/du_completer/cmd" env "github.com/rsteube/carapace-bin/completers/env_completer/cmd" exa "github.com/rsteube/carapace-bin/completers/exa_completer/cmd" @@ -94,8 +94,8 @@ import ( users "github.com/rsteube/carapace-bin/completers/users_completer/cmd" vdir "github.com/rsteube/carapace-bin/completers/vdir_completer/cmd" wc "github.com/rsteube/carapace-bin/completers/wc_completer/cmd" - who "github.com/rsteube/carapace-bin/completers/who_completer/cmd" whoami "github.com/rsteube/carapace-bin/completers/whoami_completer/cmd" + who "github.com/rsteube/carapace-bin/completers/who_completer/cmd" yes "github.com/rsteube/carapace-bin/completers/yes_completer/cmd" yj "github.com/rsteube/carapace-bin/completers/yj_completer/cmd" youtube_dl "github.com/rsteube/carapace-bin/completers/youtube-dl_completer/cmd" @@ -402,3 +402,4 @@ func executeCompleter(completer string) { youtube_dl.Execute() } } + diff --git a/completers/chgrp_completer/cmd/root.go b/completers/chgrp_completer/cmd/root.go index 5263b37963..b00b805100 100644 --- a/completers/chgrp_completer/cmd/root.go +++ b/completers/chgrp_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -42,7 +43,7 @@ func init() { if rootCmd.Flag("reference").Changed { return carapace.ActionFiles("") } else { - return carapace.ActionGroups() + return os.ActionGroups() } }), ) diff --git a/completers/chown_completer/cmd/root.go b/completers/chown_completer/cmd/root.go index 5e8d4b9b1d..7f83e45d36 100644 --- a/completers/chown_completer/cmd/root.go +++ b/completers/chown_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -34,7 +35,7 @@ func init() { rootCmd.Flags().Bool("version", false, "output version information and exit") carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ - "from": carapace.ActionUserGroup(), + "from": os.ActionUserGroup(), "reference": carapace.ActionFiles(""), }) @@ -43,7 +44,7 @@ func init() { if rootCmd.Flag("reference").Changed { return carapace.ActionFiles("") } else { - return carapace.ActionUserGroup().Callback(args) + return os.ActionUserGroup().Callback(args) } }), ) diff --git a/completers/chroot_completer/cmd/root.go b/completers/chroot_completer/cmd/root.go index 1e74ecb166..be6ad4d0fb 100644 --- a/completers/chroot_completer/cmd/root.go +++ b/completers/chroot_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -24,7 +25,7 @@ func init() { rootCmd.Flags().Bool("version", false, "output version information and exit") carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ - "groups": carapace.ActionGroups(), - "userspec": carapace.ActionUserGroup(), + "groups": os.ActionGroups(), + "userspec": os.ActionUserGroup(), }) } diff --git a/completers/chsh_completer/cmd/root.go b/completers/chsh_completer/cmd/root.go index feaa5ec59e..4d9ec54a96 100644 --- a/completers/chsh_completer/cmd/root.go +++ b/completers/chsh_completer/cmd/root.go @@ -1,10 +1,8 @@ package cmd import ( - "os/exec" - "strings" - "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -26,14 +24,6 @@ func init() { rootCmd.Flags().BoolP("version", "v", false, "display version") carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ - "shell": ActionShells(), + "shell": os.ActionShells(), }) } - -func ActionShells() carapace.Action { - if output, err := exec.Command("chsh", "--list-shells").Output(); err != nil { - return carapace.ActionMessage(err.Error()) - } else { - return carapace.ActionValues(strings.Split(string(output), "\n")...) - } -} diff --git a/completers/docker-compose_completer/cmd/exec.go b/completers/docker-compose_completer/cmd/exec.go index f840a42696..035cfdba09 100644 --- a/completers/docker-compose_completer/cmd/exec.go +++ b/completers/docker-compose_completer/cmd/exec.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -22,7 +23,7 @@ func init() { rootCmd.AddCommand(execCmd) carapace.Gen(execCmd).FlagCompletion(carapace.ActionMap{ - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) carapace.Gen(execCmd).PositionalCompletion( diff --git a/completers/docker-compose_completer/cmd/kill.go b/completers/docker-compose_completer/cmd/kill.go index eca48ab384..7accbac9a4 100644 --- a/completers/docker-compose_completer/cmd/kill.go +++ b/completers/docker-compose_completer/cmd/kill.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -18,6 +19,6 @@ func init() { rootCmd.AddCommand(killCmd) carapace.Gen(killCmd).FlagCompletion(carapace.ActionMap{ - "s": carapace.ActionKillSignals(), + "s": os.ActionKillSignals(), }) } diff --git a/completers/docker_completer/cmd/action/action.go b/completers/docker_completer/cmd/action/action.go index 4b2273aa52..65b4021e37 100644 --- a/completers/docker_completer/cmd/action/action.go +++ b/completers/docker_completer/cmd/action/action.go @@ -43,9 +43,9 @@ func ActionRepositories() carapace.Action { } func ActionRepositoryTags() carapace.Action { - return carapace.ActionMultiParts(":", func(args []string, parts []string) []string { + return carapace.ActionMultiParts(":", func(args []string, parts []string) carapace.Action { if output, err := exec.Command("docker", "image", "ls", "--format", "{{.Repository}}:{{.Tag}}", "--filter", "dangling=false").Output(); err != nil { - return []string{} + return carapace.ActionMessage(err.Error()) } else { // TODO add checks to not cause an out of bounds error vals := strings.Split(string(output), "\n") @@ -57,7 +57,7 @@ func ActionRepositoryTags() carapace.Action { reposWithSuffix[index] = strings.SplitAfter(val, ":")[0] } } - return reposWithSuffix + return carapace.ActionValues(reposWithSuffix...) case 1: tags := make([]string, 0) for _, val := range vals[:len(vals)-1] { @@ -66,9 +66,9 @@ func ActionRepositoryTags() carapace.Action { tags = append(tags, tag) } } - return tags + return carapace.ActionValues(tags...) default: - return []string{} + return carapace.ActionValues() } } }) @@ -76,22 +76,22 @@ func ActionRepositoryTags() carapace.Action { // TODO not yet working - also needs multiple characters to split on `:` `/` func ActionContainerPath() carapace.Action { - return carapace.ActionMultiParts(":", func(args []string, parts []string) []string { + return carapace.ActionMultiParts(":", func(args []string, parts []string) carapace.Action { switch len(parts) { case 0: // TODO add description support //if output, err := exec.Command("docker", "container", "ls", "--format", "{{.Names}}:\n{{.Image}} ({{.Status}})").Output(); err != nil { if output, err := exec.Command("docker", "container", "ls", "--format", "{{.Names}}:").Output(); err != nil { - return []string{} + return carapace.ActionValues() } else { vals := strings.Split(string(output), "\n") - return vals[:len(vals)-1] + return carapace.ActionValues(vals[:len(vals)-1]...) } default: if output, err := exec.Command("docker", "exec", parts[0], "ls", filepath.Dir(strings.Join(parts[1:], "/"))).Output(); err != nil { - return []string{} + return carapace.ActionValues() } else { - return strings.Split(string(output), "\n") + return carapace.ActionValues(strings.Split(string(output), "\n")...) } } }) diff --git a/completers/docker_completer/cmd/container_create.go b/completers/docker_completer/cmd/container_create.go index d95294a63e..c7f83d0286 100644 --- a/completers/docker_completer/cmd/container_create.go +++ b/completers/docker_completer/cmd/container_create.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -115,13 +116,13 @@ func init() { "cpu-shares": carapace.ActionValues("0", "10", "100", "200", "500", "800", "1000"), "device": carapace.ActionFiles(""), "env-file": carapace.ActionFiles(""), - "group-add": carapace.ActionGroups(), + "group-add": os.ActionGroups(), "isolation": carapace.ActionValues("default", "hyperv", "process"), "label-file": carapace.ActionFiles(""), "log-driver": action.ActionLogDrivers(), "network": carapace.ActionValues("bridge", "container", "host", "none"), "pid": carapace.ActionValues("container", "host"), - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) carapace.Gen(container_createCmd).PositionalCompletion( diff --git a/completers/docker_completer/cmd/container_exec.go b/completers/docker_completer/cmd/container_exec.go index 0dbfbb4ae3..9d7947ff1c 100644 --- a/completers/docker_completer/cmd/container_exec.go +++ b/completers/docker_completer/cmd/container_exec.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -27,7 +28,7 @@ func init() { carapace.Gen(container_execCmd).FlagCompletion(carapace.ActionMap{ "detach-keys": action.ActionDetachKeys(), - "user": carapace.ActionUserGroup(), + "user": os.ActionUserGroup(), }) carapace.Gen(container_execCmd).PositionalCompletion( diff --git a/completers/docker_completer/cmd/container_kill.go b/completers/docker_completer/cmd/container_kill.go index 94826a38a8..02693d6855 100644 --- a/completers/docker_completer/cmd/container_kill.go +++ b/completers/docker_completer/cmd/container_kill.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -19,7 +20,7 @@ func init() { containerCmd.AddCommand(container_killCmd) carapace.Gen(container_killCmd).FlagCompletion(carapace.ActionMap{ - "signal": carapace.ActionKillSignals(), + "signal": os.ActionKillSignals(), }) carapace.Gen(container_killCmd).PositionalAnyCompletion(action.ActionContainers()) diff --git a/completers/docker_completer/cmd/container_run.go b/completers/docker_completer/cmd/container_run.go index f3426e70ea..2429420189 100644 --- a/completers/docker_completer/cmd/container_run.go +++ b/completers/docker_completer/cmd/container_run.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -119,13 +120,13 @@ func init() { "detach-keys": action.ActionDetachKeys(), "device": carapace.ActionFiles(""), "env-file": carapace.ActionFiles(""), - "group-add": carapace.ActionGroups(), + "group-add": os.ActionGroups(), "isolation": carapace.ActionValues("default", "hyperv", "process"), "label-file": carapace.ActionFiles(""), "log-driver": action.ActionLogDrivers(), "network": carapace.ActionValues("bridge", "container", "host", "none"), "pid": carapace.ActionValues("container", "host"), - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) carapace.Gen(container_runCmd).PositionalCompletion( diff --git a/completers/docker_completer/cmd/root.go b/completers/docker_completer/cmd/root.go index 61a6af80cd..692e7d0f12 100644 --- a/completers/docker_completer/cmd/root.go +++ b/completers/docker_completer/cmd/root.go @@ -37,45 +37,46 @@ func init() { "tlskey": carapace.ActionFiles(""), }) - rootCmd.AddCommand(container_attachCmd) - rootCmd.AddCommand(image_buildCmd) - rootCmd.AddCommand(container_commitCmd) - rootCmd.AddCommand(container_cpCmd) - rootCmd.AddCommand(container_createCmd) - rootCmd.AddCommand(container_diffCmd) - rootCmd.AddCommand(system_eventsCmd) - rootCmd.AddCommand(container_execCmd) - rootCmd.AddCommand(container_exportCmd) - rootCmd.AddCommand(image_historyCmd) - imagesCmd := image_lsCmd - imagesCmd.Use = "images" - rootCmd.AddCommand(imagesCmd) - rootCmd.AddCommand(image_importCmd) - rootCmd.AddCommand(system_infoCmd) - rootCmd.AddCommand(container_killCmd) - rootCmd.AddCommand(image_loadCmd) - rootCmd.AddCommand(container_logsCmd) - rootCmd.AddCommand(container_pauseCmd) - rootCmd.AddCommand(container_portCmd) - psCmd := container_lsCmd - psCmd.Use = "ps" - rootCmd.AddCommand(psCmd) - rootCmd.AddCommand(image_pullCmd) - rootCmd.AddCommand(image_pushCmd) - rootCmd.AddCommand(container_renameCmd) - rootCmd.AddCommand(container_restartCmd) - rootCmd.AddCommand(container_rmCmd) - rmiCmd := image_rmCmd - rmiCmd.Use = "rmi" - rootCmd.AddCommand(rmiCmd) - rootCmd.AddCommand(container_runCmd) - rootCmd.AddCommand(image_saveCmd) - rootCmd.AddCommand(container_startCmd) - rootCmd.AddCommand(container_statsCmd) - rootCmd.AddCommand(container_stopCmd) - rootCmd.AddCommand(image_tagCmd) - rootCmd.AddCommand(container_topCmd) - rootCmd.AddCommand(container_unpauseCmd) - rootCmd.AddCommand(container_updateCmd) - rootCmd.AddCommand(container_waitCmd) + // TODO breaks completion needs somehow be duplicated (actions must be registered under the correct name) + //rootCmd.AddCommand(container_attachCmd) + //rootCmd.AddCommand(image_buildCmd) + //rootCmd.AddCommand(container_commitCmd) + //rootCmd.AddCommand(container_cpCmd) + //rootCmd.AddCommand(container_createCmd) + //rootCmd.AddCommand(container_diffCmd) + //rootCmd.AddCommand(system_eventsCmd) + //rootCmd.AddCommand(container_execCmd) + //rootCmd.AddCommand(container_exportCmd) + //rootCmd.AddCommand(image_historyCmd) + //imagesCmd := image_lsCmd + //imagesCmd.Use = "images" + //rootCmd.AddCommand(imagesCmd) + //rootCmd.AddCommand(image_importCmd) + //rootCmd.AddCommand(system_infoCmd) + //rootCmd.AddCommand(container_killCmd) + //rootCmd.AddCommand(image_loadCmd) + //rootCmd.AddCommand(container_logsCmd) + //rootCmd.AddCommand(container_pauseCmd) + //rootCmd.AddCommand(container_portCmd) + //psCmd := container_lsCmd + //psCmd.Use = "ps" + //rootCmd.AddCommand(psCmd) + //rootCmd.AddCommand(image_pullCmd) + //rootCmd.AddCommand(image_pushCmd) + //rootCmd.AddCommand(container_renameCmd) + //rootCmd.AddCommand(container_restartCmd) + //rootCmd.AddCommand(container_rmCmd) + //rmiCmd := image_rmCmd + //rmiCmd.Use = "rmi" + //rootCmd.AddCommand(rmiCmd) + //rootCmd.AddCommand(container_runCmd) + //rootCmd.AddCommand(image_saveCmd) + //rootCmd.AddCommand(container_startCmd) + //rootCmd.AddCommand(container_statsCmd) + //rootCmd.AddCommand(container_stopCmd) + //rootCmd.AddCommand(image_tagCmd) + //rootCmd.AddCommand(container_topCmd) + //rootCmd.AddCommand(container_unpauseCmd) + //rootCmd.AddCommand(container_updateCmd) + //rootCmd.AddCommand(container_waitCmd) } diff --git a/completers/docker_completer/cmd/service_create.go b/completers/docker_completer/cmd/service_create.go index 28347907cc..b624f3903e 100644 --- a/completers/docker_completer/cmd/service_create.go +++ b/completers/docker_completer/cmd/service_create.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -90,10 +91,10 @@ func init() { carapace.Gen(service_createCmd).FlagCompletion(carapace.ActionMap{ "endpoint-mode": carapace.ActionValues("vip", "dnsrr"), "env-file": carapace.ActionFiles(""), - "group": carapace.ActionGroups(), + "group": os.ActionGroups(), "isolation": carapace.ActionValues("default", "hyperv", "process"), "log-driver": action.ActionLogDrivers(), "mode": carapace.ActionValues("replicated", "global"), - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) } diff --git a/completers/docker_completer/cmd/service_update.go b/completers/docker_completer/cmd/service_update.go index 07d108e2d8..6498b261b5 100644 --- a/completers/docker_completer/cmd/service_update.go +++ b/completers/docker_completer/cmd/service_update.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/rsteube/carapace-bin/completers/docker_completer/cmd/action" "github.com/spf13/cobra" ) @@ -102,9 +103,9 @@ func init() { serviceCmd.AddCommand(service_updateCmd) carapace.Gen(service_updateCmd).FlagCompletion(carapace.ActionMap{ - "group-add": carapace.ActionGroups(), + "group-add": os.ActionGroups(), "log-driver": action.ActionLogDrivers(), - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) carapace.Gen(service_updateCmd).PositionalCompletion( diff --git a/completers/env_completer/cmd/root.go b/completers/env_completer/cmd/root.go index a28254f3d8..f59cea3f63 100644 --- a/completers/env_completer/cmd/root.go +++ b/completers/env_completer/cmd/root.go @@ -34,8 +34,8 @@ func init() { carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ "unset": os.ActionEnvironmentVariables(), "chdir": carapace.ActionDirectories(), - "block-signal": carapace.ActionKillSignals(), - "default-signal": carapace.ActionKillSignals(), - "ignore-signal": carapace.ActionKillSignals(), + "block-signal": os.ActionKillSignals(), + "default-signal": os.ActionKillSignals(), + "ignore-signal": os.ActionKillSignals(), }) } diff --git a/completers/id_completer/cmd/root.go b/completers/id_completer/cmd/root.go index bfe9564722..bd4807a21c 100644 --- a/completers/id_completer/cmd/root.go +++ b/completers/id_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -29,6 +30,6 @@ func init() { rootCmd.Flags().BoolP("zero", "z", false, "delimit entries with NUL characters, not whitespace;") carapace.Gen(rootCmd).PositionalCompletion( - carapace.ActionUsers(), + os.ActionUsers(), ) } diff --git a/completers/install_completer/cmd/root.go b/completers/install_completer/cmd/root.go index 6dc287495c..fced6eb81f 100644 --- a/completers/install_completer/cmd/root.go +++ b/completers/install_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -41,8 +42,8 @@ func init() { carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ // TODO complete mode - "group": carapace.ActionGroups(), - "owner": carapace.ActionUsers(), + "group": os.ActionGroups(), + "owner": os.ActionUsers(), "strip-program": carapace.ActionDirectories(), "target-directory": carapace.ActionDirectories(), }) diff --git a/completers/mkdir_completer/cmd/root.go b/completers/mkdir_completer/cmd/root.go index b26f47023f..c609190c3e 100644 --- a/completers/mkdir_completer/cmd/root.go +++ b/completers/mkdir_completer/cmd/root.go @@ -36,7 +36,7 @@ func init() { // TODO bit hacky as empty delimiter not yet implemented (carapce should support multiple delimiters anyway: []rune) func ActionMode() carapace.Action { - return carapace.ActionMultiParts("", func(args, parts []string) []string { + return carapace.ActionMultiParts("", func(args, parts []string) carapace.Action { current := carapace.CallbackValue vals := []string{} if !strings.ContainsAny(current, "+-=") { @@ -56,6 +56,6 @@ func ActionMode() carapace.Action { //for index, val := range vals { // vals[index] = current + val //} - return vals + return carapace.ActionValues(vals...) }) } diff --git a/completers/pinky_completer/cmd/root.go b/completers/pinky_completer/cmd/root.go index cb6de1b100..4076660f4a 100644 --- a/completers/pinky_completer/cmd/root.go +++ b/completers/pinky_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -29,5 +30,5 @@ func init() { rootCmd.Flags().Bool("help", false, "display this help and exit") rootCmd.Flags().Bool("version", false, "output version information and exit") - carapace.Gen(rootCmd).PositionalAnyCompletion(carapace.ActionUsers()) + carapace.Gen(rootCmd).PositionalAnyCompletion(os.ActionUsers()) } diff --git a/completers/pkill_completer/cmd/root.go b/completers/pkill_completer/cmd/root.go index bd3f160260..dd4872f0ed 100644 --- a/completers/pkill_completer/cmd/root.go +++ b/completers/pkill_completer/cmd/root.go @@ -43,12 +43,12 @@ func init() { rootCmd.Flags().BoolP("version", "V", false, "output version information and exit") carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ - "euid": carapace.ActionUsers(), - "group": carapace.ActionGroups(), + "euid": os.ActionUsers(), + "group": os.ActionGroups(), "nslist": carapace.ActionValues("ipc", "mnt", "net", "pid", "user", "uts"), "pidfile": carapace.ActionFiles(""), "runstates": os.ActionProcessStates(), - "signal": carapace.ActionKillSignals(), + "signal": os.ActionKillSignals(), }) carapace.Gen(rootCmd).PositionalAnyCompletion( diff --git a/completers/sudo_completer/cmd/root.go b/completers/sudo_completer/cmd/root.go index 299ab2d252..00684fcf15 100644 --- a/completers/sudo_completer/cmd/root.go +++ b/completers/sudo_completer/cmd/root.go @@ -45,10 +45,10 @@ func init() { rootCmd.Flag("preserve-env").NoOptDefVal = " " carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ - "group": carapace.ActionGroups(), - "other-user": carapace.ActionUsers(), + "group": os.ActionGroups(), + "other-user": os.ActionUsers(), "preserve-env": os.ActionEnvironmentVariables(), // TODO comma separated list - "user": carapace.ActionUsers(), + "user": os.ActionUsers(), }) carapace.Gen(rootCmd).PositionalCompletion( diff --git a/completers/tar_completer/cmd/root.go b/completers/tar_completer/cmd/root.go index 9c0e4109ad..2cd27c9244 100644 --- a/completers/tar_completer/cmd/root.go +++ b/completers/tar_completer/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/rsteube/carapace" + "github.com/rsteube/carapace-bin/actions/os" "github.com/spf13/cobra" ) @@ -204,14 +205,14 @@ func init() { "file": carapace.ActionFiles(""), "files-from": carapace.ActionFiles(""), "format": carapace.ActionValues("gnu", "oldgnu", "pax", "posix", "ustar", "v7"), - "group": carapace.ActionGroups(), + "group": os.ActionGroups(), "group-map": carapace.ActionFiles(""), "index-file": carapace.ActionFiles(""), "info-script": carapace.ActionFiles(""), "mtime": carapace.ActionFiles(""), "new-volume-script": carapace.ActionFiles(""), "newer": carapace.ActionFiles(""), - "owner": carapace.ActionUsers(), + "owner": os.ActionUsers(), "owner-map": carapace.ActionFiles(""), "quoting-style": carapace.ActionValues("c", "clocale", "c-maybe", "escape", "literal", "locale", "shell", "shell-always"), "to-command": carapace.ActionFiles(""), diff --git a/go.mod b/go.mod index 2ef1ff0161..04268a4853 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-ps v1.0.0 - github.com/rsteube/carapace v0.0.23 + github.com/rsteube/carapace v0.1.0 github.com/smartystreets/goconvey v1.6.4 // indirect github.com/spf13/cobra v1.0.0 gopkg.in/ini.v1 v1.60.2 diff --git a/go.sum b/go.sum index 17e8c569bc..1584d03adb 100644 --- a/go.sum +++ b/go.sum @@ -110,6 +110,14 @@ github.com/rsteube/carapace v0.0.23-0.20200919223558-28d50da55e24 h1:5BFZYRJhun9 github.com/rsteube/carapace v0.0.23-0.20200919223558-28d50da55e24/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= github.com/rsteube/carapace v0.0.23 h1:2j+lphtg6ob5V4yEWYisDOalpaYyBT4htnZwawhuAS4= github.com/rsteube/carapace v0.0.23/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= +github.com/rsteube/carapace v0.0.24-0.20201004183647-a58404914b8d h1:TGU32jzw4aHJ7R9slfKnhFD2+KTsAh5ZgJTTgu1IyK0= +github.com/rsteube/carapace v0.0.24-0.20201004183647-a58404914b8d/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= +github.com/rsteube/carapace v0.0.24-0.20201004222906-feefda11ac92 h1:i8aHtz1n9MLxJC/SvqZGdUJYl/q3D5eaCJ/DIKxX8rg= +github.com/rsteube/carapace v0.0.24-0.20201004222906-feefda11ac92/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= +github.com/rsteube/carapace v0.0.24-0.20201004223900-a4f3fecde5e2 h1:PNFGjwCW6voUHEiSPrz1MJh8VIv6ofWHhVi7/aSME5Y= +github.com/rsteube/carapace v0.0.24-0.20201004223900-a4f3fecde5e2/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= +github.com/rsteube/carapace v0.1.0 h1:MGwcFwcpIkGfxEb1WxV0i9JyO51McqqdQ+WhQqSJvv4= +github.com/rsteube/carapace v0.1.0/go.mod h1:MW6dtBU0/zTdivRaQzlCHyceSHKzZP0xHqjXmgeSN5Y= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=