summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortjp <tjp@ctrl-c.club>2024-01-05 12:18:36 -0700
committertjp <tjp@ctrl-c.club>2024-01-05 12:18:36 -0700
commit78e9e89b45e8f940f87ccaf7678cacab3d47fdcc (patch)
treee639b6f1e2913347df218df7109f6c7ac8a382df
parenta8bfa115fb7186643258d1d654b770c9773bff4a (diff)
m[ark] d[elete]
-rw-r--r--actions.go12
-rw-r--r--command.go8
-rw-r--r--help.go1
-rw-r--r--mark.go21
4 files changed, 33 insertions, 9 deletions
diff --git a/actions.go b/actions.go
index 09e6a07..2faf859 100644
--- a/actions.go
+++ b/actions.go
@@ -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
diff --git a/command.go b/command.go
index c3396b2..d6d896f 100644
--- a/command.go
+++ b/command.go
@@ -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 {
diff --git a/help.go b/help.go
index f402ec9..e427522 100644
--- a/help.go
+++ b/help.go
@@ -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": `
diff --git a/mark.go b/mark.go
index 63284c5..d7286e4 100644
--- a/mark.go
+++ b/mark.go
@@ -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)
}
}