initial commit

This commit is contained in:
Benjamin VAUDOUR 2021-12-26 15:40:57 +00:00
parent 9ffc0e170f
commit 69b66ff555
22 changed files with 1774 additions and 0 deletions

53
completion/arc.elv Normal file
View file

@ -0,0 +1,53 @@
use ./file
var commands = [
help
archive
unarchive
extract
ls
]
var description = [
&help='Display the help'
&archive='Create un new archive'
&unarchive='Extract all'
&extract='Extract a single file'
&ls='List the content'
]
var extensions = [ tar bz2 zip gz lz4 sz xz zst rar ]
fn -comp-commands {
each {|c|
edit:complex-candidate $c &display=(printf '%s (%s)' $c $description[$c])
} $commands
}
fn -comp-inline-files {|archive|
try {
arc ls $archive | eawk {|_ @argv| put $argv[-1] }
} except e {
nop
}
}
fn complete {|@argv|
var c cmd = (count $argv) $argv[1]
if (== $c 2) {
-comp-commands
} elif (== $c 3) {
if (not (has-value [help archive] $cmd)) {
file:complete $argv[-1] $@extensions
}
} else {
if (eq $cmd archive) {
edit:complete-filename $@argv
} elif (eq $cmd extract) {
var archive = $argv[2]
-comp-inline-files $archive
}
}
}
set edit:completion:arg-completer[arc] = $complete~

29
completion/archiver.elv Normal file
View file

@ -0,0 +1,29 @@
var options = [
z
l
x
b
g
h
]
var description = [
&z='zst compression (default)'
&l='lz4 compression'
&x='xz compression'
&b='bz2 compression'
&g='gzip compression'
&h='display help'
]
fn -options {
each {|o|
put [&short=$o &desc=$description[$o]]
} $options
}
fn complete {|@argv|
edit:complete-getopt $argv [(-options)] [ $edit:complete-filename~ ...]
}
set edit:completion:arg-completer[archiver] = $complete~

View file

@ -0,0 +1,10 @@
use ./file
var extensions = [ tar bz2 zip gz lz4 sz xz zst rar ]
fn complete {|@argv|
var m = $argv[-1]
file:complete $m $@extensions
}
set edit:completion:arg-completer[desarchiver] = $complete~

7
completion/file.elv Normal file
View file

@ -0,0 +1,7 @@
use ../mods/common
use ../mods/file
fn complete {|motive @extensions|
var type = (common:cond (eq $motive '') prefix deep-prefix)
file:match-extensions &type=$type $motive $@extensions
}

41
completion/kcp.elv Normal file
View file

@ -0,0 +1,41 @@
fn -remotes-packages { kcp -lN }
var options = [
-h
-v
-i
-di
-u
-l
-lN
-lS
-lI
-lO
-lx
-lxS
-lxI
-lxO
-lf
-s
-g
-V
]
var np = [
-i
-di
-s
-g
-V
]
fn complete {|@argv|
var c = (count $argv)
if (== $c 2) {
all $options
} elif (and (== $c 3) (has-value $np $argv[-2])) {
-remotes-packages
}
}
set edit:completion:arg-completer[kcp] = $complete~

53
completion/mpv.elv Normal file
View file

@ -0,0 +1,53 @@
use ./file
var extensions = [
aac
ape
avi
divx
flac
flv
m3u
m4a
m4v
mp3
mp4
mpeg
mpg
mkv
mng
mov
qt
oga
ogg
ogm
ogv
opus
ra
rv
ts
vob
wav
webm
wmv
wma
wmx
]
fn complete {|@argv|
var c = (count $argv)
if (== $c 2) {
put --speed
-files $argv[-1]
} elif (== $c 3) {
if (eq $argv[-2] --speed) {
put 0.8 0.9 1.0 1.1 1.2
} else {
file:complete $argv[-1] $@extensions
}
} else {
-files $argv[-1]
}
}
set edit:completion:arg-completer[mpv] = $complete~

99
completion/pacman.elv Normal file
View file

@ -0,0 +1,99 @@
use str
use ../mods/file
use ../mods/list
fn -local-packages { pacman -Q | eawk {|_ p @_| put $p } }
fn -repo-packages {
var packages = [(pacman -Ss | list:pforeach &step=2 {|_ v|
put $v
} | eawk {|_ p @_|
put $p
})]
var spackages = [&]
peach {|p|
str:split '/' $p
} $packages | peach {|e|
set spackages[$e] = $nil
}
keys $spackages
all $packages
}
var options = [
-h
-V
-Q
-Qs
-Ql
-Qi
-Qm
-Qdt
-Qo
-R
-Rsn
-S
-Ss
-Si
-Sii
-Syu
-Syyu
-U
-D
]
var asdeps = [
-S
-U
-D
]
var lpack = [
-Q
-Qs
-Ql
-Qi
-D
-R
-Rsn
]
var rpack = [
-S
-Ss
-Si
-Sii
]
var dpack = [
-U
]
var fpack = [
-Qo
]
var extensions = [ tar.zst tar.xz tar.gz tar.bz2 ]
fn complete {|@argv|
var c = (count $argv)
if (< $c 3) {
all $options
} else {
var cmd = $argv[1]
if (and (== $c 3) (has-value $asdeps $cmd)) {
put --asdeps --asexplicit
}
if (has-value $lpack $cmd) {
-local-packages
} elif (has-value $rpack $cmd) {
-repo-packages
} elif (has-value $dpack $cmd) {
file:complete $argv[-1] $@extensions
} elif (has-value $fpack $cmd) {
edit:complete-filename $argv[-1]
}
}
}
set edit:completion:arg-completer[pacman] = $complete~

95
completion/ssh.elv Normal file
View file

@ -0,0 +1,95 @@
use path
use re
use str
use ../mods/common
use ../mods/list
use ../mods/map
use ../mods/option
var options-ssh = [ 1 2 4 6 A D f g I i L l m o v a b C c e F k N n p q R s T t X x ]
var options-scp = [ 3 4 6 B C p q r v c F i l o P S ]
fn -kh {
cat ~/.ssh/known_hosts | peach {|l|
put [(str:split ' ' $l)]
} | peach {|e|
var domains @_ = $@e
str:split ',' $domains
}
}
fn -port {|cmd @argv|
var o = (common:cond (eq $cmd 'ssh') '-p' '-P')
var margs = (option:map $argv)
var p = (map:value-of $margs $o &default=[])
cond:cexec (list:is-empty $p) 22 { put $p[-1] }
}
fn -complete-names {
var fp = $E:HOME/.config/elvish/private/sshnames
if (path:is-regular $fp) {
cat $fp | from-lines | each {|n| put (printf '%s@' $n) }
}
}
fn -complete-domains {|name hosts|
each {|h|
put (printf '%s@%s' $name $h)
} $hosts
}
fn -complete-remote-dir {|port address dir|
var cmd = (printf ^
"for f in '%s'*; do if [[ -d $f ]]; then echo $f/; else echo $f; fi; done" ^
$dir)
try {
ssh -p $port $address $cmd | each {|f|
put (printf '%s:%s' $address $f)
}
} except e { }
}
fn -complete-args {|hosts cmd @argv|
var arg = $argv[-1]
var i = (str:index $arg @)
if (< $i 0) {
-complete-names
all $hosts
if (eq $cmd scp) {
edit:complete-filename $cmd $@argv
}
return
}
var n h = $arg[..$i] $arg[(+ $i 1)..]
if (eq $cmd scp) {
set i = (str:index $h :)
if (>= $i 0) {
var d = $h[(+ $i 1)..]
set h = $h[..$i]
if (list:contains $h $hosts) {
var p = (-port $cmd @argv)
-complete-remote-dir $p $n@$h $d
}
return
}
}
-complete-domains $n $hosts
}
fn complete {|@argv|
var @hosts = (-kh)
var cmd = $argv[0]
var is-ssh = (eq $cmd ssh)
var po = (common:cond $is-ssh -p -P)
if (<= (count $argv) 2) {
all (common:cond $is-ssh $options-ssh $options-scp)
-complete-args $hosts $@argv
} elif (eq $argv[-2] $po) {
put 22
} else {
-complete-args $hosts $@argv
}
}
set edit:completion:arg-completer[scp] = $complete~
set edit:completion:arg-completer[ssh] = $complete~

10
completion/sudo.elv Normal file
View file

@ -0,0 +1,10 @@
fn complete {|@argv|
if (and (> (count $argv) 2) (has-key $edit:completion:arg-completer $argv[1])) {
$edit:completion:arg-completer[$argv[1]] (all $argv[1:])
} else {
edit:complete-sudo $@argv
}
}
set edit:completion:arg-completer[sudo] = $edit:complete-sudo~
#edit:completion:arg-completer[sudo] = $-complete~

31
completion/use.elv Normal file
View file

@ -0,0 +1,31 @@
use path
use str
use ./file
var libdir = $E:HOME/.config/elvish/lib
var builtin_modules = [
builtin
epm
file
math
path
re
readline-binding
store
str
unix
]
set edit:completion:arg-completer[use] = {|@argv|
use str
use path
all $builtin_modules
put $libdir/**.elv | each {|f|
if (path:is-regular $f) {
str:trim-prefix $f $libdir/
}
} | each {|f| str:trim-suffix $f .elv }
if (> (count $argv) 1) {
file:complete $argv[-1] elv | each {|f| str:trim-suffix $f .elv }
}
}