builtin_fn_fs.go 620 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package eval
  2. import (
  3. "src.elv.sh/pkg/eval/errs"
  4. "src.elv.sh/pkg/fsutil"
  5. )
  6. // Filesystem commands.
  7. func init() {
  8. addBuiltinFns(map[string]any{
  9. // Directory
  10. "cd": cd,
  11. // Path
  12. "tilde-abbr": tildeAbbr,
  13. })
  14. }
  15. func cd(fm *Frame, args ...string) error {
  16. var dir string
  17. switch len(args) {
  18. case 0:
  19. var err error
  20. dir, err = getHome("")
  21. if err != nil {
  22. return err
  23. }
  24. case 1:
  25. dir = args[0]
  26. default:
  27. return errs.ArityMismatch{What: "arguments", ValidLow: 0, ValidHigh: 1, Actual: len(args)}
  28. }
  29. return fm.Evaler.Chdir(dir)
  30. }
  31. func tildeAbbr(path string) string {
  32. return fsutil.TildeAbbr(path)
  33. }