diff options
Diffstat (limited to 'commands/z.go')
-rw-r--r-- | commands/z.go | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/commands/z.go b/commands/z.go index ca982ba7..a0054faa 100644 --- a/commands/z.go +++ b/commands/z.go @@ -9,7 +9,9 @@ import ( "git.sr.ht/~rjarry/aerc/widgets" ) -type Zoxide struct{} +type Zoxide struct { + Target string `opt:"..." default:"~" metavar:"DIRECTORY|QUERY"` +} func ZoxideAdd(arg string) error { zargs := []string{"add", arg} @@ -42,15 +44,9 @@ func (Zoxide) Complete(aerc *widgets.Aerc, args []string) []string { // Execute calls zoxide add and query and delegates actually changing the // directory to ChangeDirectory -func (Zoxide) Execute(aerc *widgets.Aerc, args []string) error { - if len(args) < 1 { - return errors.New("Usage: z [directory or zoxide query]") - } - target := strings.Join(args[1:], " ") - switch target { - case "": - return ChangeDirectory{}.Execute(aerc, args) - case "-": +func (z Zoxide) Execute(aerc *widgets.Aerc, args []string) error { + switch z.Target { + case "-", "~": if previousDir != "" { err := ZoxideAdd(previousDir) if err != nil { @@ -59,7 +55,7 @@ func (Zoxide) Execute(aerc *widgets.Aerc, args []string) error { } return ChangeDirectory{}.Execute(aerc, args) default: - _, err := os.Stat(target) + _, err := os.Stat(z.Target) if err != nil { // not a file, assume zoxide query res, err := ZoxideQuery(args) @@ -70,11 +66,12 @@ func (Zoxide) Execute(aerc *widgets.Aerc, args []string) error { if err != nil { return err } - return ChangeDirectory{}.Execute(aerc, []string{"z", res}) + cd := ChangeDirectory{Target: res} + return cd.Execute(aerc, []string{"cd", res}) } } else { - err := ZoxideAdd(target) + err := ZoxideAdd(z.Target) if err != nil { return err } |