m[ark] d[elete]

This commit is contained in:
tjp 2024-01-05 12:18:36 -07:00
parent a8bfa115fb
commit 78e9e89b45
4 changed files with 33 additions and 9 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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": `

21
mark.go
View File

@ -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)
}
}