diff --git a/fs.elv b/fs.elv index f2beac5..d5b5f71 100644 --- a/fs.elv +++ b/fs.elv @@ -1,15 +1,15 @@ use github.com/champii/elvish-base/utils # fs utils -fn isFile [x]{ +fn isFile {|x| not (utils:has_failed { test -f $x }) } -fn isDir [x]{ +fn isDir {|x| not (utils:has_failed { test -d $x }) } -fn type [x]{ +fn type {|x| if (isFile $x) { put 'file' } else { @@ -17,25 +17,25 @@ fn type [x]{ } } -fn kilo [x]{ +fn kilo {|x| * $x 1024 } -fn mega [x]{ +fn mega {|x| * (kilo $x) 1024 } -fn giga [x]{ +fn giga {|x| * (mega $x) 1024 } # files -fn exists [filename]{ +fn exists {|filename| not (utils:has_failed { stat $filename }) } -fn size [filename]{ - set os = (uname -s) +fn size {|filename| + var os; set os = (uname -s) if (==s $os "Linux") { put (stat --printf="%s" $filename) } else { @@ -43,16 +43,16 @@ fn size [filename]{ } } -fn pretty_size [filename]{ - i = 0 - x = (size $filename) +fn pretty_size {|filename| + var i = 0 + var x = (size $filename) while (>= $x 1024) { - i = (+ $i 1) - x = (/ $x 1024) + set i = (+ $i 1) + set x = (/ $x 1024) } - x = (utils:floor $x) + set x = (utils:floor $x) if (eq $i 1) { put $x"Ko" @@ -65,28 +65,29 @@ fn pretty_size [filename]{ } } -fn zero [filename]{ +fn zero {|filename| == (size $filename) 0 } -fn zero_or_null [filename]{ +fn zero_or_null {|filename| not (and (exists $filename) (not (zero $filename))) } fn list_empty { - @list = (e:ls) + var @list = (e:ls) - utils:filter [x]{ eq (size $x) 0 } $list + utils:filter {|x| eq (size $x) 0 } $list } -fn list_gt [s]{ - @list = (e:ls) +fn list_gt {|s| + var @list = (e:ls) - utils:filter [x]{ >= (size $x) $s } $list + utils:filter {|x| >= (size $x) $s } $list } -fn File [path]{ - fileObj = [ +fn File {|path| + var fileObj + set fileObj = [ &path=(path:abs $path) &type=(type (path:abs $path)) diff --git a/utils.elv b/utils.elv index c2a90aa..34b07e5 100644 --- a/utils.elv +++ b/utils.elv @@ -1,43 +1,43 @@ -fn optional_in [rest]{ - arr = [] +fn optional_in {|rest| + var arr = [] if (not (eq (count $rest) 1)) { - arr = (all) + set arr = (all) } else { - arr = $rest[0] + set arr = $rest[0] } put $arr } -fn to_list [@rest]{ - arr = [] +fn to_list {|@rest| + var arr = [] if (not (eq (count $rest) 1)) { - @arr = (all) + set @arr = (all) } else { - arr = $rest[0] + set arr = $rest[0] } put $arr } -fn null_out [f]{ +fn null_out {|f| { $f 2>&- > /dev/null } } -fn has_failed [p]{ +fn has_failed {|p| eq (bool ?(null_out $p)) $false } -fn json [file]{ +fn json {|file| cat $file | from-json } -fn filter [f @rest]{ - a = (optional_in $rest) +fn filter {|f @rest| + var a = (optional_in $rest) - @res = (for x $a { + var @res = (for x $a { if ($f $x) { put $x } @@ -46,10 +46,10 @@ fn filter [f @rest]{ put $res } -fn map [f @rest]{ - a = (optional_in $rest) +fn map {|f @rest| + var a = (optional_in $rest) - @res = (for x $a { + var @res = (for x $a { put ($f $x) }) @@ -63,16 +63,16 @@ fn map [f @rest]{ # put $acc #} -fn floor [x]{ - @r = (splits . $x) +fn floor {|x| + var @r = (splits . $x) put $r[0] } -fn zipMap [f @rest]{ - arr = (optional_in $rest) +fn zipMap {|f @rest| + var arr = (optional_in $rest) - res = (map [x]{ - @in = ($f $x) + var res = (map {|x| + var @in = ($f $x) put [$x $@in] } $arr) @@ -80,43 +80,43 @@ fn zipMap [f @rest]{ put $res } -fn _table_tab_size [arr]{ +fn _table_tab_size {|arr| if (eq (count $arr) 0) { put [] return } - @max = (repeat (count $arr[0]) 0) + var @max = (repeat (count $arr[0]) 0) - each [line]{ - i = 0 + each {|line| + var i = 0 - each [item]{ - size = (count $item) + each {|item| + var size = (count $item) if (> $size $max[$i]) { - max[$i] = $size + set max[$i] = $size } - i = (+ $i 1) + set i = (+ $i 1) } $line } $arr put $max } -fn table_print [@rest]{ - arr = (optional_in $rest) +fn table_print {|@rest| + var arr = (optional_in $rest) - tab_size = (_table_tab_size $arr) + var tab_size = (_table_tab_size $arr) - each [line]{ - i = 0 + each {|line| + var i = 0 - each [item]{ + each {|item| printf "%-"$tab_size[$i]"s " $item - i = (+ $i 1) + set i = (+ $i 1) } $line printf "\n"