src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/builtin_fn_fs.go (about)

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