Files
aerc-fork-mirror/commands/cd.go
Robin Jarry d0484b153a completion: add command option descriptions
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>
2024-10-23 10:22:51 +02:00

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
}