mirror of
https://git.sr.ht/~rjarry/aerc
synced 2025-12-12 20:36:12 +01:00
Add `desc:""` struct field tags in all command arguments where it makes sense. The description values will be returned along with completion choices. Implements: https://todo.sr.ht/~rjarry/aerc/271 Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Bojan Gabric <bojan@bojangabric.com> Tested-by: Jason Cox <me@jasoncarloscox.com> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
package commands
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
|
|
"git.sr.ht/~rjarry/aerc/app"
|
|
"git.sr.ht/~rjarry/aerc/lib/xdg"
|
|
)
|
|
|
|
var previousDir string
|
|
|
|
type ChangeDirectory struct {
|
|
Target string `opt:"directory" default:"~" complete:"CompleteTarget" desc:"Target directory."`
|
|
}
|
|
|
|
func init() {
|
|
Register(ChangeDirectory{})
|
|
}
|
|
|
|
func (ChangeDirectory) Description() string {
|
|
return "Change aerc's current working directory."
|
|
}
|
|
|
|
func (ChangeDirectory) Context() CommandContext {
|
|
return GLOBAL
|
|
}
|
|
|
|
func (ChangeDirectory) Aliases() []string {
|
|
return []string{"cd"}
|
|
}
|
|
|
|
func (*ChangeDirectory) CompleteTarget(arg string) []string {
|
|
return CompletePath(arg, true)
|
|
}
|
|
|
|
func (cd ChangeDirectory) Execute(args []string) error {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if cd.Target == "-" {
|
|
if previousDir == "" {
|
|
return errors.New("No previous folder to return to")
|
|
} else {
|
|
cd.Target = previousDir
|
|
}
|
|
}
|
|
target := xdg.ExpandHome(cd.Target)
|
|
if err := os.Chdir(target); err == nil {
|
|
previousDir = cwd
|
|
app.UpdateStatus()
|
|
}
|
|
return err
|
|
}
|