package commands import ( "errors" "os" "strings" "git.sr.ht/~sircmpwn/aerc/widgets" "github.com/mitchellh/go-homedir" ) var ( previousDir string ) type ChangeDirectory struct{} func init() { register(ChangeDirectory{}) } func (_ ChangeDirectory) Aliases() []string { return []string{"cd"} } func (_ ChangeDirectory) Complete(aerc *widgets.Aerc, args []string) []string { path := "" if len(args) >= 1 { path = args[0] } completions := CompletePath(path) var dirs []string for _, c := range completions { // filter out non-directories if strings.HasSuffix(c, "/") { dirs = append(dirs, c) } } return dirs } func (_ ChangeDirectory) Execute(aerc *widgets.Aerc, args []string) error { if len(args) < 1 || len(args) > 2 { return errors.New("Usage: cd [directory]") } cwd, err := os.Getwd() if err != nil { return err } var target string if len(args) == 1 { target = "~" } else if args[1] == "-" { if previousDir == "" { return errors.New("No previous folder to return to") } else { target = previousDir } } else { target = args[1] } target, err = homedir.Expand(target) if err != nil { return err } if err := os.Chdir(target); err == nil { previousDir = cwd } return err }