summaryrefslogtreecommitdiff
path: root/pkg/server
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server')
-rw-r--r--pkg/server/cmds.go54
-rw-r--r--pkg/server/env.go1
-rw-r--r--pkg/server/server.go2
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
}