diff options
Diffstat (limited to 'pkg/server')
| -rw-r--r-- | pkg/server/cmds.go | 54 | ||||
| -rw-r--r-- | pkg/server/env.go | 1 | ||||
| -rw-r--r-- | pkg/server/server.go | 2 |
3 files changed, 55 insertions, 2 deletions
diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go index f148991..e383dac 100644 --- a/pkg/server/cmds.go +++ b/pkg/server/cmds.go @@ -2,6 +2,7 @@ package server import ( "strings" + "sort" "log" ) @@ -17,6 +18,10 @@ type node struct { var cmds = newNode() +func init() { + newCmd(help, "help") +} + func newNode() *node { return &node{m: map[string]*node{}} } @@ -61,3 +66,52 @@ func getCmd(path []string) (*cmd, []string) { return nil, nil } + +func help(r *request) { + var ss []string + + var walker func ([]string, *node) + + walker = func (path []string, node *node) { + if node.c != nil { + ss = append(ss, strings.Join(path, " ")) + return + } + + n := len(path) + path = append(path, "") + + for k, v := range node.m { + path[n] = k + walker(path, v) + } + } + + root := cmds + + for _, s := range r.args { + root = root.m[s] + + if root == nil { + break + } + } + + if root == nil { + r.Print("nothing to help") + return + } + + if root.c != nil { + r.Print("usage: ", root.c.name, " [...]") + return + } + + walker(nil, root) + + sort.Strings(ss) + + for _, s := range ss { + r.Println(s) + } +} diff --git a/pkg/server/env.go b/pkg/server/env.go index 6434432..eed6e67 100644 --- a/pkg/server/env.go +++ b/pkg/server/env.go @@ -98,7 +98,6 @@ func envShow(r *request) { r.Println(k, v) return true }) - case 1: envGet(r) } diff --git a/pkg/server/server.go b/pkg/server/server.go index 8b803e7..1248b1d 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -229,7 +229,7 @@ func (r *request) parse(query string) bool { c, args := getCmd(strings.Split(query, " ")) if c == nil { - r.Print("unknown command") + r.Print("command not found") return false } |
