mirror of
https://framagit.org/benjamin.vaudour/elv-lib.git
synced 2024-01-13 09:20:05 +01:00
initial commit
This commit is contained in:
parent
9ffc0e170f
commit
69b66ff555
22 changed files with 1774 additions and 0 deletions
53
completion/arc.elv
Normal file
53
completion/arc.elv
Normal 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
29
completion/archiver.elv
Normal 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~
|
||||
10
completion/desarchiver.elv
Normal file
10
completion/desarchiver.elv
Normal 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
7
completion/file.elv
Normal 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
41
completion/kcp.elv
Normal 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
53
completion/mpv.elv
Normal 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
99
completion/pacman.elv
Normal 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
95
completion/ssh.elv
Normal 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
10
completion/sudo.elv
Normal 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
31
completion/use.elv
Normal 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 }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue