1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
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
}
|