diff options
| -rw-r--r-- | actions.go | 12 | ||||
| -rw-r--r-- | command.go | 8 | ||||
| -rw-r--r-- | help.go | 1 | ||||
| -rw-r--r-- | mark.go | 21 |
4 files changed, 33 insertions, 9 deletions
@@ -359,7 +359,7 @@ func parseURL(str string, state *BrowserState, defaultScheme string) (*url.URL, } if strings.HasPrefix(str, "m:") { - target, err := findMark(state, str[2:]) + _, target, err := findMark(state, str[2:]) if err != nil { return nil, -1, err } @@ -440,6 +440,11 @@ func print(state *BrowserState) error { out = state.Modal } + if state.Modal != nil || state.Pager == "never" { + _, err := os.Stdout.Write(out) + return err + } + lessarg := []string{} switch state.Pager { case "auto": @@ -455,9 +460,6 @@ func print(state *BrowserState) error { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() - case "never": - _, err := os.Stdout.Write(out) - return err } return errors.New("invalid 'pager' value in configuration") @@ -545,6 +547,8 @@ func Mark(state *BrowserState, args []string, conf *Config) error { return MarkGo(state, conf, args[1]) case "list": return MarkList(state) + case "delete": + return MarkDelete(state, args[1]) } return ErrInvalidMarkArgs @@ -187,6 +187,14 @@ func parseMarkArgs(line string) ([]string, error) { } return fields, nil } + case 'd': + if strings.HasPrefix("delete", fields[0]) { + fields[0] = "delete" + if len(fields) != 2 { + return nil, ErrInvalidArgs + } + return fields, nil + } } if len(fields) != 1 { @@ -119,6 +119,7 @@ or unique prefix of a name can be used as "mark go". m[ark] a[dd] NAME URL: adds a new name/url pair to your saved marks. m[ark] g[o] NAME: navigates to the named mark's URL. m[ark] l[ist]: shows the list of marks and their URLs. +m[ark] d[elete] NAME: removes the named mark. `[1:], "tour": ` @@ -23,7 +23,7 @@ func MarkAdd(state *BrowserState, conf *Config, name, target string) error { } func MarkGo(state *BrowserState, conf *Config, name string) error { - target, err := findMark(state, name) + _, target, err := findMark(state, name) if err != nil { return err } @@ -43,22 +43,33 @@ func MarkList(state *BrowserState) error { return Print(state) } -func findMark(state *BrowserState, prefix string) (string, error) { +func MarkDelete(state *BrowserState, name string) error { + name, _, err := findMark(state, name) + if err != nil { + return err + } + delete(state.Marks, name) + return saveMarks(state.Marks) +} + +func findMark(state *BrowserState, prefix string) (string, string, error) { found := 0 + fullname := "" value := "" for name, target := range state.Marks { if strings.HasPrefix(name, prefix) { found += 1 value = target + fullname = name } } switch found { case 0: - return "", ErrNotAMark + return "", "", ErrNotAMark case 1: - return value, nil + return fullname, value, nil default: - return "", fmt.Errorf("too ambiguous - found %d matching marks", found) + return "", "", fmt.Errorf("too ambiguous - found %d matching marks", found) } } |
