diff options
Diffstat (limited to 'command.go')
| -rw-r--r-- | command.go | 32 |
1 files changed, 25 insertions, 7 deletions
@@ -56,6 +56,12 @@ func ParseCommand(line string) (*Command, error) { if strings.HasPrefix("previous", cmd) { return &Command{Name: "previous"}, nil } + if strings.HasPrefix("pipe", cmd) { + return &Command{ + Name: "pipe", + Args: []string{rest}, + }, nil + } case 'u': if strings.HasPrefix("up", cmd) { return &Command{Name: "up"}, nil @@ -163,11 +169,11 @@ func parseMarkArgs(line string) ([]string, error) { } func parseTourArgs(line string) ([]string, error) { - if line == "" { + fields := strings.Fields(line) + if len(fields) == 0 { return []string{"next"}, nil } - fields := strings.Fields(line) switch fields[0][0] { case 'a': if strings.HasPrefix("add", fields[0]) { @@ -176,10 +182,21 @@ func parseTourArgs(line string) ([]string, error) { return nil, ErrInvalidArgs } if strings.HasPrefix("next", fields[1]) { + if len(fields) == 2 { + return nil, ErrInvalidArgs + } fields[1] = "next" } return fields, nil } + case 'c': + if strings.HasPrefix("clear", fields[0]) { + fields[0] = "clear" + if len(fields) != 1 { + return nil, ErrInvalidArgs + } + return fields, nil + } case 'n': if strings.HasPrefix("next", fields[0]) { fields[0] = "next" @@ -192,14 +209,11 @@ func parseTourArgs(line string) ([]string, error) { if strings.HasPrefix("set", fields[0]) { fields[0] = "set" if len(fields) == 1 { - return fields, nil + return append(fields, ""), nil } if len(fields) != 2 { return nil, ErrInvalidArgs } - if len(fields[1]) != 1 || fields[1][0] < 'a' || fields[1][0] > 'z' { - return nil, ErrInvalidArgs - } return fields, nil } if strings.HasPrefix("show", fields[0]) { @@ -238,7 +252,7 @@ func parseTourArgs(line string) ([]string, error) { } } - return nil, ErrInvalidArgs + return append([]string{"add"}, fields...), nil } func RunCommand(conf *Config, cmd *Command, state *BrowserState) error { @@ -261,6 +275,8 @@ func RunCommand(conf *Config, cmd *Command, state *BrowserState) error { return Up(state, conf) case "go": return Go(state, cmd.Args[0], conf) + case "pipe": + return Pipe(state, cmd.Args[0]) case "print": return Print(state) case "links": @@ -271,6 +287,8 @@ func RunCommand(conf *Config, cmd *Command, state *BrowserState) error { return Save(state, cmd.Args[0], conf) case "mark": return Mark(state, cmd.Args, conf) + case "tour": + return TourCmd(state, cmd.Args, conf) case "quit": os.Exit(0) } |
