Désactivation de la commande pdf, ajout de commandes pour récupérer les PKGBUILD Arch/AUR, commande de cnéation de fichiers php, gestion de l’historique d’Elvish, nouveaux aliases (gzip, bzip2) + remplacement de dog par doggo & exa par eza, helix utilisé désormais par défaut, rréécriture de vpn
This commit is contained in:
parent
b3d74ce2d7
commit
7ae2fc2712
12 changed files with 1041 additions and 642 deletions
|
@ -1,18 +1,24 @@
|
|||
edit:add-var aspire~ {|@argv| e:wget -r -k -E -np $@argv }
|
||||
edit:add-var bzip2~ {|@argv| e:lbzip2 $@argv }
|
||||
edit:add-var cat~ {|@argv| e:bat -pp --tabs 2 $@argv }
|
||||
edit:add-var cp~ {|@argv| e:cp -iv $@argv }
|
||||
edit:add-var curl~ $e:curlie~
|
||||
edit:add-var df~ $e:duf~
|
||||
edit:add-var diff~ $e:delta~
|
||||
edit:add-var dig~ {|@argv| e:dig +noall +answer $@argv }
|
||||
edit:add-var dogall~ {|@argv| e:dog A AAAA CNAME TXT MX NS SOA $@argv }
|
||||
edit:add-var dogall~ {|@argv| e:doggo A AAAA CNAME TXT MX NS SOA $@argv }
|
||||
edit:add-var du~ {|@argv| e:du -h $@argv }
|
||||
fn -erd {|@argv| e:erd -HlI --dir-order last --sort name --layout inverted $@argv }
|
||||
#edit:add-var erd~ $-erd~
|
||||
edit:add-var grep~ {|@argv| e:grep --color=tty -d skip $@argv }
|
||||
edit:add-var gzip~ {|@argv| e:pigz $@argv }
|
||||
#edit:add-var grep~ {|@argv| e:ack $@argv }
|
||||
edit:add-var hx~ {|@argv| e:helix $@argv }
|
||||
edit:add-var mv~ {|@argv| e:mv -iv $@argv }
|
||||
edit:add-var open-db~ {|@argv|
|
||||
var @params = (print (e:cat $E:HOME/.config/elvish/private/mariadb_connection) | from-terminated ' ')
|
||||
e:dblab $@params --db $@argv
|
||||
}
|
||||
edit:add-var pf~ {|@argv| e:pkgfile -vri $@argv }
|
||||
edit:add-var rm~ {|@argv| e:rm -Iv $@argv }
|
||||
edit:add-var rename~ {|@argv| /home/benjamin/bin/rename $@argv }
|
||||
|
|
25
aliases/arch.elv
Normal file
25
aliases/arch.elv
Normal file
|
@ -0,0 +1,25 @@
|
|||
use str
|
||||
var archbase = 'https://gitlab.archlinux.org/archlinux/packaging/packages/{repo}/-/raw/main/{file}'
|
||||
var aurbase = 'https://aur.archlinux.org/cgit/aur.git/plain/{file}?h={repo}'
|
||||
|
||||
fn -dl {|baseUrl repo @files|
|
||||
if (== (count $files) 0) {
|
||||
set @files = PKGBUILD
|
||||
}
|
||||
|
||||
echo $files
|
||||
|
||||
each {|file|
|
||||
var url = (str:replace '{file}' $file (str:replace '{repo}' $repo $baseUrl))
|
||||
printf "wget2 -O %s %s\n" $file $url
|
||||
e:wget2 -O $file $url
|
||||
} $files
|
||||
}
|
||||
|
||||
edit:add-var arch-dl~ {|repo @files|
|
||||
-dl $archbase $repo $@files
|
||||
}
|
||||
|
||||
edit:add-var aur-dl~ {|repo @files|
|
||||
-dl $aurbase $repo $@files
|
||||
}
|
11
aliases/aur.elv
Normal file
11
aliases/aur.elv
Normal file
|
@ -0,0 +1,11 @@
|
|||
edit:add-var aur-get~ {|package @files|
|
||||
if (eq (count $files) 0) {
|
||||
echo "usage: aur-get <package> file1 [file2...]"
|
||||
}
|
||||
|
||||
peach {|file|
|
||||
var url = (printf 'https://aur.archlinux.org/cgit/aur.git/plain/%s?h=%s' $file $package)
|
||||
printf "Command: wget -O %s %s" $file $url
|
||||
wget -O $file $url
|
||||
} $files
|
||||
}
|
69
aliases/create-php.elv
Normal file
69
aliases/create-php.elv
Normal file
|
@ -0,0 +1,69 @@
|
|||
edit:add-var create-php~ {|@argv|
|
||||
use flag
|
||||
use os
|
||||
use str
|
||||
|
||||
var flags rest = (flag:parse $argv [
|
||||
[a $false 'Classe abstraite']
|
||||
[c $false 'Classe standard']
|
||||
[i $false 'Interface']
|
||||
[t $false 'Trait']
|
||||
])
|
||||
|
||||
if (!= (count $rest) 1) {
|
||||
echo 'Usage: create-php [-a|-c|-i|-t] <path>'
|
||||
return
|
||||
}
|
||||
|
||||
var name = $@rest
|
||||
var gitRoot = (git rev-parse --show-toplevel)
|
||||
var currentDir = (pwd -P)
|
||||
var currentDirRelative = (str:replace &max=1 $gitRoot '' $currentDir)
|
||||
var isRoot = (==s $currentDirRelative '')
|
||||
var isSrc = (==s $currentDirRelative '/src')
|
||||
|
||||
if (and (not $isRoot) (not $isSrc) (!= (str:index $currentDirRelative '/src/') 0)) {
|
||||
fail 'Vous devez être à la racine du projet ou dans un sous-répertoire de src/'
|
||||
}
|
||||
|
||||
var fromRoot = (== (str:index $name 'src/') 0)
|
||||
if $fromRoot {
|
||||
set name = (str:replace &max=1 'src/' '' $name)
|
||||
}
|
||||
|
||||
var @spl = (str:split '/' $name)
|
||||
var @path className = $@spl
|
||||
set path = (str:join '/' $path)
|
||||
if (not (or $isRoot $isSrc $fromRoot)) {
|
||||
set path = (printf '%s/%s' $currentDirRelative $path | str:trim-prefix '/')
|
||||
}
|
||||
|
||||
var fileName = (printf '%s/%s.php' $path $className)
|
||||
var fullPath = (printf '%s/src/%s' $gitRoot $fileName)
|
||||
if (os:exists &follow-symlink=$true $fullPath) {
|
||||
fail 'Le fichier '$fullPath' existe déjà.'
|
||||
}
|
||||
|
||||
os:mkdir-all $gitRoot'/src/'$path
|
||||
|
||||
var namespace = (str:replace '/' '\' $path)
|
||||
var type = 'class'
|
||||
if $flags['a'] {
|
||||
set type = 'abstract class'
|
||||
} elif $flags['i'] {
|
||||
set type = 'interface'
|
||||
} elif $flags['t'] {
|
||||
set type = 'trait'
|
||||
}
|
||||
var content = [
|
||||
'<?php'
|
||||
''
|
||||
(printf 'namespace App\%s;' $namespace)
|
||||
''
|
||||
(printf '%s %s' $type $className)
|
||||
'{'
|
||||
'}'
|
||||
]
|
||||
|
||||
echo (str:join "\n" $content) > $fullPath
|
||||
}
|
264
aliases/history.elv
Normal file
264
aliases/history.elv
Normal file
|
@ -0,0 +1,264 @@
|
|||
edit:add-var history~ {|@argv|
|
||||
use flag
|
||||
use re
|
||||
use store
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/map
|
||||
|
||||
fn -history {|@seq|
|
||||
var @seq = (order $seq | compact)
|
||||
var all = (== (count $seq) 0)
|
||||
|
||||
if $all {
|
||||
store:cmds 0 -1
|
||||
} else {
|
||||
store:cmds 0 -1 | each {|h|
|
||||
if (has-value $seq $h[seq]) {
|
||||
put $h
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -group {||
|
||||
var @hist = (all)
|
||||
var group = [&]
|
||||
|
||||
each {|h|
|
||||
var t s = $h[text] $h[seq]
|
||||
var seq = (conj (map:value-of &default=[] $group $t) $s)
|
||||
|
||||
set group[$t] = $seq
|
||||
} $hist
|
||||
|
||||
put $group
|
||||
}
|
||||
|
||||
fn -search {|cb|
|
||||
-history | each {|h|
|
||||
if ($cb $h[text]) {
|
||||
put $h
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -remove {|seq| each $store:del-cmd~ $seq }
|
||||
|
||||
fn clean {||
|
||||
var hist = (-history | -group)
|
||||
|
||||
keys $hist | each {|k|
|
||||
var seq = $hist[$k]
|
||||
var l = (- (count $seq) 1)
|
||||
if (> $l 0) {
|
||||
put $seq[..$l]
|
||||
}
|
||||
} | each $-remove~
|
||||
}
|
||||
|
||||
fn -parse {|@args|
|
||||
var flags term = (flag:parse $args [
|
||||
[r $false 'Regexp']
|
||||
[e $false 'Exact']
|
||||
[i $false 'Insensible à la casse']
|
||||
])
|
||||
if (== (count $term) 0) {
|
||||
fail 'Veuillez préciser le terme de recherche'
|
||||
}
|
||||
set term = $term[0]
|
||||
var contains~ = {|s| str:contains $s $term }
|
||||
var exact~ = {|s| ==s $s $term }
|
||||
var match~ = {|s| re:match $term $s }
|
||||
var insensitive~ = {|cb| put {|s| $cb (str:to-lower $s) $term } }
|
||||
|
||||
var cb = $contains~
|
||||
if $flags[e] {
|
||||
if $flags[i] {
|
||||
set term = (str:to-lower $term)
|
||||
set cb = (insensitive $exact~)
|
||||
} else {
|
||||
set cb = $exact~
|
||||
}
|
||||
} elif $flags[r] {
|
||||
if $flags[i] {
|
||||
set term = '(?i)'$term
|
||||
}
|
||||
set cb = $match~
|
||||
} elif $flags[i] {
|
||||
set term = (str:to-lower $term)
|
||||
set cb = (insensitive $contains~)
|
||||
}
|
||||
|
||||
put $cb
|
||||
}
|
||||
|
||||
fn search {|@args|
|
||||
var cb = (-parse $@args)
|
||||
|
||||
-search $cb | each {|h| put $h[text] } | order | compact
|
||||
}
|
||||
|
||||
fn remove {|@args|
|
||||
var cb = (-parse $@args)
|
||||
var hist = (-search $cb | -group)
|
||||
if (== (count $hist) 0) {
|
||||
echo 'Terme non trouvé'
|
||||
} else {
|
||||
var @keys = (keys $hist | order | compact)
|
||||
echo 'Sélectionnez les entrées à supprimer séparées par des virgules (0 pour tout, par défaut, rien)'
|
||||
echo
|
||||
range (count $keys) | each {|i|
|
||||
printf "%d) %s\n" (+ $i 1) $keys[$i]
|
||||
}
|
||||
print 'Votre choix : '
|
||||
echo
|
||||
var result = (read-line)
|
||||
if (re:match '^\d+(,\d+)*$' $result) {
|
||||
var @idx = (str:split ',' $result)
|
||||
var @seq = []
|
||||
var l = (count $keys)
|
||||
if (has-value $idx 0) {
|
||||
set @seq = (keys $hist | each {|k| all $hist[$k] })
|
||||
} else {
|
||||
set @seq = (each {|i|
|
||||
if (<= $i $l) {
|
||||
var k = $keys[(- $i 1)]
|
||||
all $hist[$k]
|
||||
}
|
||||
} $idx)
|
||||
}
|
||||
set @seq = (order $seq | compact)
|
||||
-remove $seq
|
||||
printf "%d entrées supprimées\n" (count $seq)
|
||||
} else {
|
||||
echo 'Action annulée'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var actions = [
|
||||
#&help= $help~
|
||||
&clean= $clean~
|
||||
&search= $search~
|
||||
&del= $remove~
|
||||
]
|
||||
|
||||
var action @argv = $@argv
|
||||
|
||||
$actions[$action] $@argv
|
||||
}
|
||||
edit:add-var dir-history~ {|@argv|
|
||||
use flag
|
||||
use re
|
||||
use store
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/map
|
||||
|
||||
fn -dirs {||
|
||||
store:dirs | each {|d| put $d[path] } | order | compact
|
||||
}
|
||||
|
||||
fn -search {|cb|
|
||||
-dirs | each {|d|
|
||||
if ($cb $d) {
|
||||
put $d
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -remove {|dirs| each $store:del-dir~ $dirs }
|
||||
|
||||
fn clean {||
|
||||
-remove (-dirs)
|
||||
}
|
||||
|
||||
fn -parse {|@args|
|
||||
var flags term = (flag:parse $args [
|
||||
[r $false 'Regexp']
|
||||
[e $false 'Exact']
|
||||
[i $false 'Insensible à la casse']
|
||||
])
|
||||
if (== (count $term) 0) {
|
||||
fail 'Veuillez préciser le terme de recherche'
|
||||
}
|
||||
set term = $term[0]
|
||||
var contains~ = {|s| str:contains $s $term }
|
||||
var exact~ = {|s| ==s $s $term }
|
||||
var match~ = {|s| re:match $term $s }
|
||||
var insensitive~ = {|cb| put {|s| $cb (str:to-lower $s) $term } }
|
||||
|
||||
var cb = $contains~
|
||||
if $flags[e] {
|
||||
if $flags[i] {
|
||||
set term = (str:to-lower $term)
|
||||
set cb = (insensitive $exact~)
|
||||
} else {
|
||||
set cb = $exact~
|
||||
}
|
||||
} elif $flags[r] {
|
||||
if $flags[i] {
|
||||
set term = '(?i)'$term
|
||||
}
|
||||
set cb = $match~
|
||||
} elif $flags[i] {
|
||||
set term = (str:to-lower $term)
|
||||
set cb = (insensitive $contains~)
|
||||
}
|
||||
|
||||
put $cb
|
||||
}
|
||||
|
||||
fn search {|@args|
|
||||
var cb = (-parse $@args)
|
||||
|
||||
-search $cb
|
||||
}
|
||||
|
||||
fn remove {|@args|
|
||||
var cb = (-parse $@args)
|
||||
var @dirs = (-search $cb)
|
||||
if (== (count $dirs) 0) {
|
||||
echo 'Terme non trouvé'
|
||||
} else {
|
||||
echo 'Sélectionnez les entrées à supprimer séparées par des virgules (0 pour tout, par défaut, rien)'
|
||||
echo
|
||||
range (count $dirs) | each {|i|
|
||||
printf "%d) %s\n" (+ $i 1) $dirs[$i]
|
||||
}
|
||||
print 'Votre choix : '
|
||||
echo
|
||||
var result = (read-line)
|
||||
if (re:match '^\d+(,\d+)*$' $result) {
|
||||
var @idx = (str:split ',' $result)
|
||||
var @seq = []
|
||||
var l = (count $dirs)
|
||||
if (has-value $idx 0) {
|
||||
set seq = $dirs
|
||||
} else {
|
||||
set @seq = (each {|i|
|
||||
if (and (> $i 0) (<= $i $l)) {
|
||||
var k = (- $i 1)
|
||||
put $dirs[$k]
|
||||
}
|
||||
} $idx)
|
||||
}
|
||||
set @seq = (order $seq | compact)
|
||||
-remove $seq
|
||||
printf "%d entrées supprimées\n" (count $seq)
|
||||
} else {
|
||||
echo 'Action annulée'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var actions = [
|
||||
#&help= $help~
|
||||
&clean= $clean~
|
||||
&search= $search~
|
||||
&del= $remove~
|
||||
]
|
||||
|
||||
var action @argv = $@argv
|
||||
|
||||
$actions[$action] $@argv
|
||||
}
|
|
@ -6,12 +6,12 @@ fn -go-ls {|@argv|
|
|||
e:go-ls --group-directories-first -T '+%Y.%m.%d %H:%M' --git $@argv
|
||||
}
|
||||
|
||||
fn -exa {|@argv|
|
||||
e:exa --color auto --git --icons --group-directories-first $@argv
|
||||
fn -eza {|@argv|
|
||||
e:eza --color auto --git --icons --group-directories-first $@argv
|
||||
}
|
||||
|
||||
fn -exal {|@argv|
|
||||
-exa -lghH@ --time-style long-iso $@argv
|
||||
fn -ezal {|@argv|
|
||||
-eza -lghH --time-style long-iso $@argv
|
||||
}
|
||||
|
||||
fn -lsd {|@argv|
|
||||
|
@ -22,8 +22,8 @@ fn -lsdl {|@argv|
|
|||
-lsd -lg --header $@argv
|
||||
}
|
||||
|
||||
var cmd = $-exa~
|
||||
var cmdl = $-exal~
|
||||
var cmd = $-eza~
|
||||
var cmdl = $-ezal~
|
||||
|
||||
edit:add-var ls~ {|@argv| $cmd $@argv }
|
||||
#edit:add-var la~ {|@argv| $cmd -a $@argv }
|
||||
|
|
462
aliases/pdf.elv
462
aliases/pdf.elv
|
@ -1,462 +0,0 @@
|
|||
edit:add-var pdf~ {|action @args|
|
||||
use math
|
||||
use os
|
||||
use path
|
||||
use re
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/common
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/format
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/map
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/pdf
|
||||
|
||||
var -c~ = $common:cexec~
|
||||
var -cc~ = {|c f1| -c $c $f1 $nop~}
|
||||
|
||||
fn must-pdf {|file| -cc (not (pdf:is-pdf $file)) { fail (printf '%s n’est pas un fichier pdf' $file) }}
|
||||
fn must-exist {|file| -cc (pdf:not-exist $file) { fail (printf '%s n’existe pas' $file) }}
|
||||
fn must-not-exist {|file| -cc (pdf:exist $file) { fail (printf '%s existe déjà' $file) }}
|
||||
fn must-pdf-exist {|file|
|
||||
must-pdf $file
|
||||
must-exist $file
|
||||
}
|
||||
fn must-pdf-not-exist {|file|
|
||||
must-pdf $file
|
||||
must-not-exist $file
|
||||
}
|
||||
fn must-valid {|v cond| -cc (not ($cond $v)) { fail (printf '%s: paramètre invalide' $v) }}
|
||||
|
||||
fn out {|in suffix|
|
||||
var out = (str:trim-suffix $in .pdf)
|
||||
str:join '' [ $out $suffix ]
|
||||
}
|
||||
|
||||
fn help {|@args| cat $E:HOME/.config/elvish/aliases/pdf.help}
|
||||
|
||||
fn decrypt {|@args|
|
||||
var l = (count $args)
|
||||
-cc (or (< $l 1) (> $l 3)) { fail 'decrypt doit contenir entre 1 et 3 paramètres' }
|
||||
var in = $args[0]
|
||||
var out = (out $in _decrypted.pdf)
|
||||
var passwd = []
|
||||
must-pdf-exist $in
|
||||
if (> $l 1) {
|
||||
set @passwd = $args[1]
|
||||
if (> $l 2) {
|
||||
set out = $args[2]
|
||||
}
|
||||
}
|
||||
must-pdf-not-exist $out
|
||||
pdf:decrypt &out=$out $in $@passwd
|
||||
}
|
||||
|
||||
fn rotate {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'rotate doit contenir au moins 1 paramètres' }
|
||||
var in = $args[0]
|
||||
var out = (out $in _rotated.pdf)
|
||||
if (pdf:is-pdf $args[$l]) {
|
||||
set @args out = (all $args[1..])
|
||||
}
|
||||
must-pdf-exist $in
|
||||
must-pdf-not-exist $out
|
||||
each {|e|
|
||||
must-valid $e $pdf:is-rotate-selection~
|
||||
} $args
|
||||
pdf:rotate &keep=$true &out=$out $in $@args
|
||||
}
|
||||
|
||||
fn merge {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'merge doit contenir au moins 2 paramètres' }
|
||||
var @selection out = $@args
|
||||
must-pdf-not-exist $out
|
||||
var has-in = $false
|
||||
each {|e|
|
||||
if (pdf:is-pdf $e) {
|
||||
must-exist $e
|
||||
set has-in = $true
|
||||
} else {
|
||||
-cc (not $has-in) { fail 'Une sélection doit être précédée d’un fichier d’entrée' }
|
||||
must-valid $e $pdf:is-selection~
|
||||
}
|
||||
} $selection
|
||||
pdf:cat &out=$out $@selection
|
||||
}
|
||||
|
||||
fn unmerge {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'unmerge doit contenir au moins 2 paramètres' }
|
||||
var in = $args[0]
|
||||
var out = (out $in _unmerged)
|
||||
if (not (pdf:is-selection $args[$l])) {
|
||||
set @args out = (all $args[1..])
|
||||
}
|
||||
must-pdf-exist $in
|
||||
must-not-exist $out
|
||||
each {|e|
|
||||
must-valid $e $pdf:is-selection~
|
||||
} $args
|
||||
pdf:uncat $in $out $@args
|
||||
}
|
||||
|
||||
fn split {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'split doit contenir au moins 2 paramètres' }
|
||||
var out = $args[$l]
|
||||
set args = $args[..$l]
|
||||
must-not-exist $out
|
||||
var s = 1
|
||||
if (pdf:is-number $args[0]) {
|
||||
set s @args = $@args
|
||||
}
|
||||
var t = (pdf:-t)
|
||||
try {
|
||||
pdf:cat &out=$t $@args
|
||||
pdf:split &size=$s $t $out
|
||||
} finally {
|
||||
os:remove-all $t
|
||||
}
|
||||
}
|
||||
|
||||
fn split-at {|@args|
|
||||
var l = (count $args)
|
||||
-cc (!= $l 3) { fail 'split-at doit contenir 3 paramètres' }
|
||||
var rg in out = $@args
|
||||
must-pdf-exist $in
|
||||
must-not-exist $out
|
||||
must-valid $rg {|e| re:match '^\d+(,\d+)*$' $e }
|
||||
var b sel = 1 []
|
||||
str:split ',' $rg | order | each {|s|
|
||||
var e = (- $s 1)
|
||||
if (== $b $e) {
|
||||
set @sel = $@sel $b
|
||||
set b = $s
|
||||
} elif (< $b $e) {
|
||||
set @sel = $@sel (printf '%d-%d' $b $e)
|
||||
set b = $s
|
||||
}
|
||||
}
|
||||
set @sel = $@sel (printf '%d-z' $b)
|
||||
unmerge $in $@sel $out
|
||||
}
|
||||
|
||||
fn zip {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'zip doit contenir au moins 2 paramètres' }
|
||||
var @selection out = $@args
|
||||
must-pdf-not-exist $out
|
||||
var has-in = $false
|
||||
each {|e|
|
||||
if (pdf:is-pdf $e) {
|
||||
must-exist $e
|
||||
set has-in = $true
|
||||
} else {
|
||||
-cc (not $has-in) { fail 'Une sélection doit être précédée d’un fichier d’entrée' }
|
||||
must-valid $e $pdf:is-selection~
|
||||
}
|
||||
} $selection
|
||||
pdf:cat &collate=$true &out=$out $@selection
|
||||
}
|
||||
|
||||
fn unzip {|@args|
|
||||
var l = (- (count $args) 1)
|
||||
-cc (< $l 1) { fail 'unzip doit contenir au moins 2 paramètres' }
|
||||
var in @sel out = $@args
|
||||
var mod = 2
|
||||
if (pdf:is-number $in) {
|
||||
set mod = $in
|
||||
-cc (eq (count $sel) 0) { fail 'unzip doit contenir au moins 3 paramètres' }
|
||||
set in @sel = $@sel
|
||||
}
|
||||
must-not-exist $out
|
||||
var t = (pdf:-t)
|
||||
try {
|
||||
pdf:cat &out=$t $in $@sel
|
||||
var n = (pdf:nb-pages $t)
|
||||
os:mkdir $out
|
||||
range 1 (+ 1 $mod) | each {|m|
|
||||
var sel = (range 1 (+ $n 1) | each {|i|
|
||||
var s = (% $i $mod)
|
||||
-cc (== $s 0) { set s = $mod }
|
||||
-cc (== $s $m) $i
|
||||
} | each $to-string~ | str:join ',')
|
||||
pdf:cat &out=(printf '%s/%d.pdf' $out $m) $t $sel
|
||||
}
|
||||
} finally {
|
||||
os:remove-all $t
|
||||
}
|
||||
}
|
||||
|
||||
fn pts2cm {|v| / (math:round (* $v 3.52778)) 100}
|
||||
fn -date {|raw|
|
||||
var y m d = $raw[2..6] $raw[6..8] $raw[8..10]
|
||||
var h n s = $raw[10..12] $raw[12..14] $raw[14..16]
|
||||
var rest = []
|
||||
-cc (> (count $raw[16..]) 0) { set @rest = (str:split "'" $raw[16..]) }
|
||||
var tz = '+00:00'
|
||||
if (> (count $rest) 0) {
|
||||
var tz = $rest[0]
|
||||
-cc (eq $tz[0] 'Z') { set tz = $tz[1..] }
|
||||
-cc (eq $tz '') { set tz = '00' }
|
||||
-cc (and (not-eq $tz[0] '+') (not-eq $tz[0] '-')) { set tz = (printf '+%s' $tz) }
|
||||
var mm = '00'
|
||||
-cc (and (> (count $rest) 1) (pdf:is-number $rest[1])) { set mm = $rest[1] }
|
||||
set tz = (printf '%s:%s' $tz $mm)
|
||||
}
|
||||
var date = (printf ^
|
||||
'%s-%s-%sT%s:%s:%sZ%s' ^
|
||||
$y $m $d ^
|
||||
$h $n $s ^
|
||||
$tz)
|
||||
date --date $date
|
||||
}
|
||||
|
||||
fn info {|@args|
|
||||
-cc (!= (count $args) 1) { fail 'info doit contenir un paramètre' }
|
||||
var in @_ = $@args
|
||||
must-pdf-exist $in
|
||||
var json = (pdf:json $in)
|
||||
var objects = $json[objects]
|
||||
var trailer = $objects[trailer]
|
||||
var infos = $objects[$trailer[/Info]]
|
||||
var pages = $json[pages]
|
||||
var p1 = $objects[$pages[0][object]]
|
||||
var w h = (all $p1[/MediaBox][2..] | each $pts2cm~)
|
||||
var layout = (-c (> $w $h) 'Paysage' 'Portrait')
|
||||
var title = (map:value-of $infos '/Title')
|
||||
var subject = (map:value-of $infos '/Subject')
|
||||
var author = (map:value-of $infos '/Author')
|
||||
var creator = (map:value-of $infos '/Creator')
|
||||
var producer = (map:value-of $infos '/Producer')
|
||||
var mdate = (-c (has-key $infos '/ModDate') { -date $infos[/ModDate] } '')
|
||||
var crypted = (-c (pdf:encryption $in)[encrypted] 'Oui' 'Non')
|
||||
var hasform = ( -c (pdf:form $in)[hasacroform] 'Oui' 'Non')
|
||||
var data = [
|
||||
[&k='Chemin' &v=(path:abs $in)]
|
||||
[&k='Taille' &v=(format:size (stat -c '%s' $in))]
|
||||
[&k='Version PDF' &v=(pdf:version $in)]
|
||||
[&k='Nombre de pages' &v=(count $pages)]
|
||||
[&k='Format des pages' &v=(printf '%sx%s cm (%s)' $w $h $layout)]
|
||||
[&k='Titre' &v=$title]
|
||||
[&k='Subjet' &v=$subject]
|
||||
[&k='Auteur' &v=$author]
|
||||
[&k='Créateur' &v=$creator]
|
||||
[&k='producteur' &v=$producer]
|
||||
[&k='Date de création' &v=(-date $infos[/CreationDate])]
|
||||
[&k='Date de modification' &v=$mdate]
|
||||
[&k='Chiffré' &v=$crypted]
|
||||
[&k='Acroform' &v=$hasform]
|
||||
]
|
||||
var label = (format:repeat 21 ' ')
|
||||
var @props = (format:column &align=right k $label) (format:column v $label)
|
||||
set props = (format:update-props $props $data)
|
||||
var sep = (format:repeat (+ $props[0][size] $props[1][size] 3) '.')
|
||||
var @part = $data[..5] $data[5..12] $data[12..]
|
||||
each {|d|
|
||||
format:list &with-header=$false &csep=' : ' &recompute=$false $props $@d
|
||||
echo $sep
|
||||
} $part
|
||||
}
|
||||
|
||||
fn list-attachments {|in| all (pdf:attachments $in)}
|
||||
fn display-attachments {|in|
|
||||
var @data = (list-attachments $in)
|
||||
printf "%d pièce(s)-jointe(s) trouvée(s):\n\n" (count $data)
|
||||
each $echo~ $data
|
||||
echo
|
||||
}
|
||||
fn extract-attachments {|in out| list-attachments $in | each {|f| pdf:attachment $in $out/$f $f }}
|
||||
fn list-fonts {|in|
|
||||
pdf:fonts $in | each {|f|
|
||||
-cc (has-key $f /FontDescriptor) { put [&font=$f &fd=$f[/FontDescriptor]] }
|
||||
} | each {|f|
|
||||
-cc (has-key $f[fd] /FontName) { assoc $f name $f[fd][/FontName] }
|
||||
} | each {|f|
|
||||
var @_ n = (str:split '+' $f[name])
|
||||
var font = $f[font]
|
||||
var fd = $f[fd]
|
||||
var embed = (has-key $fd /FontFile2)
|
||||
var file = (-c $embed $fd[/FontFile2] '')
|
||||
set n = (str:trim-prefix $n '/')
|
||||
put [
|
||||
&id=$font[id]
|
||||
&name=$n
|
||||
&embed=$embed
|
||||
&file=$file
|
||||
&type=(str:trim-prefix $font[/Subtype] '/')
|
||||
&encoding=(str:trim-prefix $font[/Encoding] '/')
|
||||
]
|
||||
}
|
||||
}
|
||||
fn display-fonts {|in|
|
||||
var @data = (list-fonts $in)
|
||||
printf "%d police(s) trouvée(s):\n\n" (count $data)
|
||||
var props = [
|
||||
(format:column &align=center id ID)
|
||||
(format:column name Nom)
|
||||
(format:column type Type)
|
||||
(format:column encoding Encodage)
|
||||
(format:column &align=center embed Téléchargeable)
|
||||
(format:column &align=center file Fichier)
|
||||
]
|
||||
format:list $props $@data
|
||||
echo
|
||||
}
|
||||
fn extract-fonts {|in out|
|
||||
list-fonts $in | each {|f|
|
||||
-cc $f[embed] { pdf:filtered-stream $in (printf '%s/%s.ttf' $out $f[name]) $f[file] }
|
||||
}
|
||||
}
|
||||
fn list-images {|in|
|
||||
pdf:images $in | each {|i|
|
||||
var w = (format:int $i[/Width])
|
||||
var h = (format:int $i[/Height])
|
||||
var c = (-c (has-key $i /ColorSpace) { put $i[/ColorSpace][0] } '')
|
||||
put [
|
||||
&id=$i[id]
|
||||
&page=(format:int $i[page])
|
||||
&name=(str:trim-prefix $i[name] '/')
|
||||
&width=$w
|
||||
&height=$h
|
||||
&dim=(printf '%dx%d' $w $h)
|
||||
&filter=(str:trim-prefix $i[/Filter] '/')
|
||||
&size=(format:size $i[/Length])
|
||||
&bpc=(format:int $i[/BitsPerComponent])
|
||||
&color=(str:trim-prefix $c '/')
|
||||
]
|
||||
}
|
||||
var objects = (pdf:objects $in)
|
||||
all (pdf:pages $in) | each {|p|
|
||||
var pn = (format:int $p[pageposfrom1])
|
||||
all $p[images] | each {|img|
|
||||
var id = $img[object]
|
||||
var o = (pdf:-object &extend=$true $objects $id)
|
||||
var s = $o[/Length]
|
||||
var c = (-c (has-key $o /ColorSpace) { put $o[/ColorSpace][0] } '')
|
||||
var w = (format:int $o[/Width])
|
||||
var h = (format:int $o[/Height])
|
||||
put [
|
||||
&id=$id
|
||||
&page=$pn
|
||||
&name=(str:trim-prefix $img[name] '/')
|
||||
&width=$w
|
||||
&height=$h
|
||||
&dim=(printf '%dx%d' $w $h)
|
||||
&filter=(str:trim-prefix $o[/Filter] '/')
|
||||
&size=(format:size $s)
|
||||
&bpc=(format:int $o[/BitsPerComponent])
|
||||
&color=(str:trim-prefix $c '/')
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
fn display-images {|in|
|
||||
var @data = (list-images $in)
|
||||
printf "%d image(s) trouvée(s):\n\n" (count $data)
|
||||
var props = [
|
||||
(format:column &align=right page Page)
|
||||
(format:column &align=center id ID)
|
||||
(format:column name Nom)
|
||||
(format:column &align=right size Taille)
|
||||
(format:column &align=right dim Dimensions)
|
||||
(format:column color Couleur)
|
||||
(format:column &align=right bpc BPC)
|
||||
(format:column &align=center filter Filtre)
|
||||
]
|
||||
format:list $props $@data
|
||||
echo
|
||||
}
|
||||
fn extract-images {|in out|
|
||||
# En attendant de savoir décoder correctement les images, on utilise poppler
|
||||
pdfimages -all $in $out/Im
|
||||
}
|
||||
|
||||
fn list {|@args|
|
||||
-cc (!= (count $args) 2) { fail 'list doit comporter 2 paramètres' }
|
||||
var types in = $@args
|
||||
must-pdf-exist $in
|
||||
var display = [
|
||||
&a=$display-attachments~
|
||||
&f=$display-fonts~
|
||||
&i=$display-images~
|
||||
]
|
||||
str:split ',' $types | each {|t|
|
||||
set t = (str:to-lower $t)
|
||||
must-valid $t {|e| and (> (count $e) 0) (has-key $display $e[0])}
|
||||
$display[$t[0]] $in
|
||||
}
|
||||
}
|
||||
|
||||
fn extract {|@args|
|
||||
-cc (!= (count $args) 3) { fail 'extract doit comporter 3 paramètres' }
|
||||
var types in out = $@args
|
||||
must-pdf-exist $in
|
||||
must-not-exist $out
|
||||
var extr = [
|
||||
&a=$extract-attachments~
|
||||
&f=$extract-fonts~
|
||||
&i=$extract-images~
|
||||
]
|
||||
try {
|
||||
os:mkdir $out
|
||||
str:split ',' $types | each {|t|
|
||||
set t = (str:to-lower $t)
|
||||
must-valid $t {|e| and (> (count $e) 0) (has-key $extr $e[0])}
|
||||
$extr[$t[0]] $in $out
|
||||
}
|
||||
} catch e {
|
||||
os:remove-all $out
|
||||
fail $e
|
||||
}
|
||||
}
|
||||
|
||||
fn gray {|@args|
|
||||
-cc (!= (count $args) 2) { fail 'gray doit comporter 2 paramètres' }
|
||||
var in out = $@args
|
||||
must-pdf-exist $in
|
||||
must-pdf-not-exist $out
|
||||
convert -colorspace gray $in $out
|
||||
}
|
||||
|
||||
fn mono {|@args|
|
||||
var c = (count $args)
|
||||
-cc (or (< $c 2) (> $c 3)) { fail 'mono doit comporter entre 2 et 3 paramètres' }
|
||||
var t = $nil
|
||||
if (pdf:is-number $args[0]) {
|
||||
set t @args = $@args
|
||||
-cc (or (< $t 0) (> $t 100)) { fail le taux doit être compris entre 0 et 100 }
|
||||
-cc (< $c 2) { fail 'mono doit comporter 3 paramètres' }
|
||||
}
|
||||
var in out = $@args
|
||||
must-pdf-exist $in
|
||||
must-pdf-not-exist $out
|
||||
if $t {
|
||||
convert -colorspace gray -threshold $t'%' $in $out
|
||||
} else {
|
||||
convert -monochrome $in $out
|
||||
}
|
||||
}
|
||||
|
||||
var actions = [
|
||||
&help=$help~
|
||||
&decrypt=$decrypt~
|
||||
&rotate=$rotate~
|
||||
&merge=$merge~
|
||||
&cat=$merge~
|
||||
&unmerge=$unmerge~
|
||||
&uncat=$unmerge~
|
||||
&split=$split~
|
||||
&split-at=$split-at~
|
||||
&cut=$split-at~
|
||||
&zip=$zip~
|
||||
&unzip=$unzip~
|
||||
&info=$info~
|
||||
&list=$list~
|
||||
&extract=$extract~
|
||||
&gray=$gray~
|
||||
&mono=$mono~
|
||||
#&compress=$compress~
|
||||
]
|
||||
-cc (not (has-key $actions $action)) { fail (printf '%s: action inconnue' $action) }
|
||||
$actions[$action] $@args
|
||||
}
|
451
aliases/pdf.elv.save
Normal file
451
aliases/pdf.elv.save
Normal file
|
@ -0,0 +1,451 @@
|
|||
edit:add-var pdf~ {|action @args|
|
||||
use flag
|
||||
use math
|
||||
use os
|
||||
use path
|
||||
use re
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/list
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/map
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/pdf
|
||||
|
||||
fn -parse {|rest specs|
|
||||
var flags = [&]
|
||||
var @spec = (each {|s|
|
||||
var d = (map:value-of &default=$false $s 'default')
|
||||
var sh = $s['short']
|
||||
var lg = $s['long']
|
||||
if (has-key $s 'default') {
|
||||
assoc $s 'arg-required' $true
|
||||
} else {
|
||||
set d = $false
|
||||
assoc $s 'arg-optional' $true
|
||||
}
|
||||
set flags[$sh] = $d
|
||||
set flags[$lg] = $d
|
||||
} $specs)
|
||||
|
||||
var parsed argv = (flag:parse-getopt $rest $spec)
|
||||
each {|p|
|
||||
var v = $p['arg']
|
||||
var s = $p['spec']
|
||||
var sh = $s['short']
|
||||
var lg = $s['long']
|
||||
|
||||
if (map:value-of &default=$false $s 'arg-optional') {
|
||||
set v = $true
|
||||
}
|
||||
set flags[$sh] = $v
|
||||
set flags[$lg] = $v
|
||||
} $parsed
|
||||
|
||||
put $flags $argv
|
||||
}
|
||||
|
||||
fn -size {|s|
|
||||
var b = (num 1024.0)
|
||||
var u = ['' K M G]
|
||||
var i = 0
|
||||
|
||||
while (and (< $i 3) (>= $s $b)) {
|
||||
set s i = (/ $s $b) (+ $i 1)
|
||||
}
|
||||
|
||||
if (> $i 0) {
|
||||
set s = (/ (math:round (* $s 10.0)) 10.0)
|
||||
}
|
||||
|
||||
str:join '' [ (echo $s) $u[$i] ]
|
||||
}
|
||||
|
||||
fn -f {|arg|
|
||||
if (eq $arg $nil) {
|
||||
put ''
|
||||
} elif (pdf:is-string $arg) {
|
||||
put $arg
|
||||
} elif (==s (kind-of $arg) 'bool') {
|
||||
if $arg {
|
||||
put 'Oui'
|
||||
} else {
|
||||
put 'Non'
|
||||
}
|
||||
} else {
|
||||
echo $arg
|
||||
}
|
||||
}
|
||||
|
||||
fn -format {|title header data|
|
||||
var size = [&]
|
||||
each {|c| set size[$c] = (wcswidth $c) } $header
|
||||
each {|line|
|
||||
keys $line | each {|k|
|
||||
var v = $line[$k]
|
||||
var l = (wcswidth $v)
|
||||
if (> $l $size[$k]) {
|
||||
set size[$k] = $l
|
||||
}
|
||||
}
|
||||
} $data
|
||||
|
||||
echo (styled $title bold yellow)
|
||||
if (== (count $data) 0) {
|
||||
echo 'Aucune donnée…'
|
||||
} else {
|
||||
echo (styled (each {|c| pdf:align $c $size[$c] } $header | str:join ' ') bold underlined)
|
||||
each {|line|
|
||||
echo (each {|c| pdf:align $line[$c] $size[$c] } $header | str:join ' ')
|
||||
} $data
|
||||
}
|
||||
echo
|
||||
}
|
||||
|
||||
fn help {|@args| e:cat $E:HOME/.config/elvish/aliases/pdf.help }
|
||||
|
||||
fn compress {|@rest|
|
||||
var flags rest = (-parse $rest [
|
||||
[&short=r &long=resolution &default=$nil]
|
||||
[&short=t &long=type &default='screen']
|
||||
])
|
||||
var input output = (list:value-of $rest 0) (list:value-of $rest 1)
|
||||
var type resolution = $flags[t] &$flags[r]
|
||||
|
||||
pdf:must ¬=$true $input {|arg| eq $arg $nil } 'Le fichier d’entrée est obligatoire'
|
||||
pdf:must-pdf-exist $input
|
||||
|
||||
if (eq $output $nil) {
|
||||
set output = (pdf:output $input '_compressed.pdf')
|
||||
}
|
||||
pdf:must-pdf-not-exist $output
|
||||
|
||||
pdf:must ['default' 'screen' 'ebook' 'printer' 'prepress'] {|arg| has-value $arg $type} (printf '%s: type invalide' $type)
|
||||
|
||||
if (not-eq $resolution $nil) {
|
||||
pdf:must $resolution {|arg| and (pdf:is-number $arg) (>= $arg 72) (<= $arg 300) } 'La résolution doit être comprise entre 72 et 300'
|
||||
}
|
||||
|
||||
pdf:compress &resolution=$resolution &type=$type $input $output
|
||||
}
|
||||
|
||||
fn decrypt {|input @rest|
|
||||
var output password = (list:value-of &default=(pdf:output $input '_decrypted.pdf') $rest 1) (list:value-of $rest 0)
|
||||
|
||||
pdf:must-pdf-exist $input
|
||||
pdf:must-pdf-not-exist $output
|
||||
|
||||
pdf:decrypt &output=$output &password=$password $input
|
||||
}
|
||||
|
||||
fn gray {|input @rest|
|
||||
var output = (list:value-of &default=(pdf:output $input '_gray.pdf') $rest 0)
|
||||
|
||||
pdf:must-pdf-exist $input
|
||||
pdf:must-pdf-not-exist $output
|
||||
|
||||
pdf:gray $input $output
|
||||
}
|
||||
|
||||
fn info {|input|
|
||||
pdf:must-pdf-exist $input
|
||||
|
||||
var json = (pdf:json $input)
|
||||
var dict = (pdf:objects $json)
|
||||
var infos = (pdf:object &fmt=$true &rec=$true $dict 'trailer' '/Info')
|
||||
var page = (pdf:page $json 1)
|
||||
var dim = (pdf.deep &dict=$dict $page 'object' '/MediaBox')
|
||||
set dim = [
|
||||
&w= (pdf:pts2cm $dim[2])
|
||||
&h= (pdf:pts2cm $dim[3])
|
||||
]
|
||||
if (> $dim[w] $dim[h]) {
|
||||
set dim[l] = 'Paysage'
|
||||
} else {
|
||||
set dim[l] = 'Portrait'
|
||||
}
|
||||
|
||||
var encrypted form = 'Non' 'Non'
|
||||
if (pdf:encryption $json)['encrypted'] {
|
||||
set encrypted = 'Oui'
|
||||
}
|
||||
if (pdf:form $json)['hasacroform'] {
|
||||
set form = 'Oui'
|
||||
}
|
||||
|
||||
var title = (map:value-of &default='' $infos '/Title')
|
||||
var subject = (map:value-of &default='' $infos '/Subject')
|
||||
var author = (map:value-of &default='' $infos '/Author')
|
||||
var creator = (map:value-of &default='' $infos '/Creator')
|
||||
var producer = (map:value-of &default='' $infos '/Producer')
|
||||
var cdate = (map:value-of &default='' $infos '/CreationDate')
|
||||
var mdate = (map:value-of &default='' $infos '/ModDate')
|
||||
|
||||
var result = [
|
||||
&'Chemin'= (path:abs $input)
|
||||
&'Version'= (pdf:Version $json)
|
||||
&'Nombre de pages'= (pdf:nb-pages $input)
|
||||
&'Format des pages'= (printf '%s×%s cm (%s)' $dim[w] $dim[h] $dim[l])
|
||||
&'Titre'= $title
|
||||
&'Sujet'= $subject
|
||||
&'Auteur'= $author
|
||||
&'Créateur'= $creator
|
||||
&'Producteur'= $producer
|
||||
&'Date de création'= $cdate
|
||||
&'Date de modification'= $mdate
|
||||
&'Chiffré'= $encrypted
|
||||
&'Acroform'= $form
|
||||
]
|
||||
|
||||
var l = 1
|
||||
keys $result | each {|k|
|
||||
var w = (+ (wcswidth $k) 1)
|
||||
if (> $w $l) {
|
||||
set l = $w
|
||||
}
|
||||
}
|
||||
|
||||
keys $result each {|k|
|
||||
var v = $result[$k]
|
||||
echo (styled (pdf:align $k':' $l)) $v
|
||||
}
|
||||
}
|
||||
|
||||
fn mono {|@rest|
|
||||
var flags rest = (-parse $rest [
|
||||
[&short=d &long=density &default=600]
|
||||
])
|
||||
var input output = (list:value-of $rest 0) (list:value-of $rest 1)
|
||||
var density = $flags[d]
|
||||
|
||||
pdf:must ¬=$true $input {|arg| eq $arg $nil } 'Le fichier d’entrée est obligatoire'
|
||||
pdf:must-pdf-exist $input
|
||||
|
||||
if (eq $output $nil) {
|
||||
set output = (pdf:output $input '_mono.pdf')
|
||||
}
|
||||
pdf:must-pdf-not-exist $output
|
||||
|
||||
pdf:must $density {|d| and (pdf:is-number $d) (>= $d 72) (<= $d 1200) } 'La densité doit être comprise entre 72 et 1200'
|
||||
|
||||
pdf:mono &density=$density $input $output
|
||||
}
|
||||
|
||||
fn merge {|@selection output|
|
||||
pdf:must (count $selection) {|c| > $c 0 } 'La commande doit contenir au moins deux paramètres'
|
||||
pdf:must-pdf-not-exist $output
|
||||
|
||||
pdf:merge &output=$output $@selection
|
||||
}
|
||||
|
||||
fn unmerge {|input @selection output|
|
||||
pdf:must {count $selection} {|c| > $c 0} 'La commande doit contenir au moins trois paramètres'
|
||||
pdf:must-pdf-exist $input
|
||||
pdf:must-not-exist $output
|
||||
|
||||
pdf:unmerge $input $@selection $output
|
||||
}
|
||||
|
||||
fn split {|@rest input output|
|
||||
var flags _ = (-parse $rest [
|
||||
[&short=s &long=size &default=1]
|
||||
])
|
||||
var size = $flags[s]
|
||||
|
||||
pdf:must-valid $size {|arg |and (pdf:is-number $arg) (> $arg 0) }
|
||||
pdf:must-pdf-exist $input
|
||||
pdf:must-not-exist $output
|
||||
|
||||
pdf:split &size=$size $input $output
|
||||
}
|
||||
|
||||
fn split-at {|rg input output|
|
||||
pdf:must-valid $rg {|arg| re:match '^\d+(,\d+)*$' }
|
||||
var @pages = (str:split ',' $rg | order | compact)
|
||||
var last = 1
|
||||
var selection = []
|
||||
each {|p|
|
||||
if (== $p $last) {
|
||||
set @selection = $@selection $p
|
||||
} elif (> $p $last) {
|
||||
set @selection = $@selection (printf '%d-%d' $last $p)
|
||||
}
|
||||
set last = (+ $p 1)
|
||||
} $pages
|
||||
|
||||
set @selection = $@selection (printf '%d-z' $last)
|
||||
|
||||
unmerge $input $@selection $output
|
||||
}
|
||||
|
||||
fn zip {|@rest output|
|
||||
var flags selection = (-parse $rest [
|
||||
[&short=c &long=collate &default=0]
|
||||
])
|
||||
var collate = $flags[c]
|
||||
|
||||
pdf:must-pdf-not-exist $output
|
||||
pdf:must-valid $collate $pdf:is-number~
|
||||
|
||||
pdf:merge &collate &output=$output $@selection
|
||||
}
|
||||
|
||||
fn unzip {|@rest output|
|
||||
var flags selection = (-parse rest [
|
||||
[&short=m &long=modulo &default=2]
|
||||
])
|
||||
var modulo = $flags[m]
|
||||
|
||||
pdf:must-valid $modulo {|arg| and (pdf:is-number $arg) (> $arg 2) }
|
||||
pdf:must-not-exist $output
|
||||
|
||||
var t = (pdf:tmp-pdf)
|
||||
|
||||
try {
|
||||
pdf:merge &output=$t $@selection
|
||||
|
||||
var n = (pdf:nb-pages $t)
|
||||
var @sel = (range $modulo | each {|_| put [] })
|
||||
|
||||
range $n {|i|
|
||||
var s = (% $i $modulo)
|
||||
set sel[$s] = (conj $sel[$s] (+ $i 1) )
|
||||
}
|
||||
set @sel = (each {|s| str:join ',' $s } $sel)
|
||||
|
||||
unmerge $t $@sel $output
|
||||
} catch err {
|
||||
}
|
||||
|
||||
os:remove-all $t
|
||||
}
|
||||
|
||||
fn list {|@rest input|
|
||||
pdf:must-pdf-exist $input
|
||||
|
||||
var flags _ = (-parse $rest [
|
||||
[&short=a &long=attachments]
|
||||
[&short=f &long=fonts]
|
||||
[&short=i &long=images]
|
||||
])
|
||||
|
||||
var json = (pdf:json $input)
|
||||
|
||||
if $flags[a] {
|
||||
var data = (pdf:attachments &fmt=$true &rec=$true $json)
|
||||
var @attachments = (keys $data | each {|id|
|
||||
var a = $data[$id]
|
||||
var name = (pdf:deep $a 'filespec' '/F')
|
||||
var size = (pdf:deep $a 'filespec' '/EF' '/F' 'dict' '/Params' '/Size')
|
||||
var mime = (pdf:deep $a 'streams' '/F' 'mimetype')
|
||||
var desc = (pdf:deep $a 'description')
|
||||
put [
|
||||
&'ID'= $id
|
||||
&'Nom'= $name
|
||||
&'Taille'= (-size $size)
|
||||
&'Mimetype'= (-f $mime)
|
||||
&'Description'= (-f $desc)
|
||||
]
|
||||
})
|
||||
|
||||
-format 'PIÈCES-JOINTES:' ['ID' 'Nom' 'Taille' 'Mimetype' 'Description'] $attachments
|
||||
}
|
||||
|
||||
if $flags[f] {
|
||||
var data = (pdf:fonts &fmt=$true &rec=$true $json)
|
||||
var @fonts = (each {|f|
|
||||
if (has-key $f '/FontDescriptor') {
|
||||
put $f
|
||||
}
|
||||
} $data | each {|f|
|
||||
var fd = (pdf:deep $f '/FontDescriptor')
|
||||
var id = (pdf:deep $fd '/FontFile2' 'object_id')
|
||||
var file = (pdf:deep $fd '/FontFile2' 'dict')
|
||||
var name = (pdf:deep $fd '/FontName')
|
||||
|
||||
if (not-eq $name $nil) {
|
||||
set name = (re:replace '^.*\+' '' $name)
|
||||
}
|
||||
var basename type encoding = (put '/BaseFont' '/Subtype' '/Encoding' | each {|k|
|
||||
var v = (pdf:deep $f $k)
|
||||
if (==s (kind-of $v) 'string') {
|
||||
str:trim-left $v '/'
|
||||
} else {
|
||||
put $v
|
||||
}
|
||||
})
|
||||
|
||||
put [
|
||||
&'ID'= $id
|
||||
&'Nom'= (-f $name)
|
||||
&'Nom de base'= (-f $basename)
|
||||
&'Embarqué'= (-f (not-eq $file $nil))
|
||||
&'Type'= (-f $type)
|
||||
&'Encodage'= (-f $encoding)
|
||||
]
|
||||
})
|
||||
|
||||
-format 'POLICES:' ['ID' 'Nom' 'Nom de base' 'Embarqué' 'Type' 'Encodage'] $fonts
|
||||
}
|
||||
|
||||
if $flags[i] {
|
||||
var data = (pdf:images &fmt=$true &rec=$true $json)
|
||||
var @images = (each {|i|
|
||||
var dict = (pdf:deep $i 'object' 'dict')
|
||||
var id = (pdf:deep $i 'object' 'object_id')
|
||||
var page = (pdf:deep $i 'page')
|
||||
var w = (pdf:deep $dict '/Width')
|
||||
var h = (pdf:deep $dict '/Height')
|
||||
var size = (pdf:deep $dict '/Length')
|
||||
var bpc = (pdf:deep $dict '/BitsPerComponent')
|
||||
var name = (pdf:deep $i 'name')
|
||||
|
||||
if (not-eq $name $nil) {
|
||||
set name = (str:trim-left $name '/')
|
||||
}
|
||||
|
||||
var filter color = (put '/Filter' '/ColorSpace' | each {|k|
|
||||
var v = (pdf:deep $dict $k)
|
||||
if (==s (kind-of $v) 'string') {
|
||||
str:trim-left $v '/'
|
||||
} else {
|
||||
put $v
|
||||
}
|
||||
})
|
||||
|
||||
put [
|
||||
&'ID'= $id
|
||||
&'Page'= (-f $page)
|
||||
&'Nom'= (-f $name)
|
||||
&'Dimensions'= (printf '%d×%d px' $w $h)
|
||||
&'Filtre'= (-f $filter)
|
||||
&'Couleur'= (-f $color)
|
||||
&'BPC'= (-f $bpc)
|
||||
&'Taille'= (-size $size)
|
||||
]
|
||||
} $data)
|
||||
|
||||
-format 'IMAGES:' ['ID' 'Page' 'Nom' 'Dimensions' 'Filtre' 'Couleur' 'BPC' 'Taille'] $images
|
||||
}
|
||||
}
|
||||
|
||||
var actions = [
|
||||
&help=$help~
|
||||
&cat=$merge~
|
||||
&compress=$compress~
|
||||
&cut=$split-at~
|
||||
&decrypt=$decrypt~
|
||||
#&extract=$extract~
|
||||
&gray=$gray~
|
||||
&info=$info~
|
||||
&list=$list~
|
||||
&merge=$merge~
|
||||
&mono=$mono~
|
||||
&split=$split~
|
||||
&split-at=$split-at~
|
||||
&uncat=$unmerge~
|
||||
&unmerge=$unmerge~
|
||||
&unzip=$unzip~
|
||||
&zip=$zip~
|
||||
]
|
||||
|
||||
pdf:must $actions {|arg| has-key $arg $action } (printf '%s: action inconnue' $action)
|
||||
$actions[$action] $@args
|
||||
}
|
|
@ -1,45 +1,64 @@
|
|||
Usage: epdf (commande) [options]
|
||||
Usage: pdf (commande) [options]
|
||||
|
||||
Commandes:
|
||||
help:
|
||||
Affiche cette aide
|
||||
cat:
|
||||
alias de merge
|
||||
compress: [<options>] <inputfile> [<outputfile>]
|
||||
Compresse la taille du fichier
|
||||
Options disponibles :
|
||||
-t, --type <str> Type de compression. Valeurs autorisées : default, screen, ebook, print, prepress [défaut: screen]
|
||||
-r, --resolution <int> Résolution. Contrainte : 72 <= <int> <= 300.
|
||||
Si la résolution n’est pas précisée, sa valeur dépend du type :
|
||||
- 72 si default ou screen,
|
||||
- 150 si ebook,
|
||||
- 300 si print ou prepress.
|
||||
Fichier de sortie par défaut : <inputfile>_compressed.pdf
|
||||
cut:
|
||||
alias de split-at
|
||||
decrypt: <inputfile> [<password> [<outputfile>]]
|
||||
Retourne un fichier déchiffré. Si aucun mot de passe n’est donné, tente le déchiffrement avec un mot de passe à blanc.
|
||||
Fichier de sortie par défaut : <inputfile>_decrypted.pdf
|
||||
extract:
|
||||
@TODO
|
||||
gray: <inputfile> [<outputfile>]
|
||||
Convertit le fichier d’entrée en nuances de gris
|
||||
Fichier de sortie par défaut : <inputfile>_gray.pdf
|
||||
info: <inputfile>
|
||||
Affiche les propriétés du document
|
||||
list: <options> <inputfile>
|
||||
Affiche la liste des fichiers inclus en filtrant selon le type (pièce-jointe (-a), image (-i) ou police (-f)).
|
||||
Options disponibles :
|
||||
-a, --attachments
|
||||
-i, --images
|
||||
-f, --fonts
|
||||
merge: <inputfile> [<pagerange>] ... <outputfile>
|
||||
Fusionne la liste des pages sélectionnées dans le fichier de sortie
|
||||
cat: alias de merge
|
||||
unmerge: <inputfile> <pagerange>... [<outputdir>]
|
||||
Crée un nouveau pdf pour chaque pagerange défini
|
||||
Défauts : <outputdir> = <inputfile>_unmerged
|
||||
uncat: alias de unmerge
|
||||
split: [<size>] <inputfile> [pagerange] .... <outputdir>
|
||||
Découpe les fichiers d’entrée en fichiers de <size> pages
|
||||
et place les découpes dans les fichiers <outputdir>/{1,2,…}.pdf
|
||||
Défauts : <size> = 1
|
||||
split-at: <pageselect> <inputfile> [pagerange] ... <outputdir>
|
||||
Découpe les fichiers d’entrée aux pages indiquées (séparées par des virgules)
|
||||
cut: alias de split-at
|
||||
zip: <inputfile> [<pagerange>] ... <outputfile>
|
||||
Réunit alternativement chaque page de chaque fichier d’entrée
|
||||
dans le fichier de sortie
|
||||
unzip: [<modulo>] <inputfile> [<pagerange>] ... <outputdir>
|
||||
Fusionne la liste des pages sélectionnées dans le fichier de sortie.
|
||||
mono: [<options>] <inputfile> [<outputfile>]
|
||||
Convertit le fichier d’entrée en noir et blanc
|
||||
Options disponibles :
|
||||
-d, --density <int> Densité. Contrainte : 72 <= <int> <= 1200. [défaut: 600]
|
||||
Fichier de sortie par défaut : <inputfile>_mono.pdf
|
||||
split: [<options>] <inputfile> <outputdir>
|
||||
Découpe les fichiers d’entrée en plusieurs fichiers. Le nombre de pages des fichiers dépend de la taille des fichiers.
|
||||
Options disponibles :
|
||||
-s, --size <int> Taille max des fichiers. Contrainte : <int> > 0. [défaut: 1]
|
||||
split-at: <pageselect> <inputfile> <outputdir>
|
||||
Découpe les fichiers d’entrée aux pages indiquées (séparées par des virgules).
|
||||
uncat:
|
||||
alias de unmerge
|
||||
unmerge: <inputfile> <pagerange>... <outputdir>
|
||||
Crée un nouveau pdf pour chaque pagerange défini.
|
||||
unzip: [<options>] <inputfile> [<pagerange>] ... <outputdir>
|
||||
Sépare alternativement chaque page dans les fichiers <outputdir>/{1,2,…}.pdf
|
||||
Le nombre de fichiers créé est indiqué par le modulo.
|
||||
Défauts : <modulo> = 2
|
||||
rotate: <inputfile> <pagerange> ... [<outputfile>]
|
||||
Copie le fichier en tournant les pages demandées
|
||||
Fichier de sortie par défaut : <inputfile>_rotated.pdf
|
||||
decrypt: <inputfile> [<password>] [<outputfile>]
|
||||
Retourne un fichier déchiffré. Si aucun mot de passe n’est donné, tente le déchiffrement
|
||||
avec un mot de passe à blanc
|
||||
Fichier de sortie par défaut : <inputfile>_decrypted.pdf
|
||||
gray: <inputfile> <outputfile>
|
||||
Convertit le fichier d’entrée en nuances de gris
|
||||
mono: [<split>] <inputfile> <outputfile>
|
||||
Convertit le fichier d’entrée en noir et blanc, au taux de coupure (exprimé en pourcentage, entre 0 et 100)
|
||||
Défauts : <split> = 50
|
||||
list: (a(ttachments)|i(mages)|f(onts)) <inputfile>
|
||||
Affiche la liste des fichiers inclus en filtrant selon le type (pièce-jointe, image ou police)
|
||||
extract: (a(ttachments)|i(mages)|f(onts)) <inputfile> <outputdir>
|
||||
Extrait les types de documents demandés dans le dossier <outputdir>
|
||||
info: <inputfile> [<field> ...]
|
||||
Affiche les propriétés du document
|
||||
Options disponibles :
|
||||
-m, --modulo <int> Contrainte : <int> > 1. [défaut: 2]
|
||||
zip: [<options>] <inputfile> [<pagerange>] ... <outputfile>
|
||||
Réunit alternativement chaque page de chaque sélection dans le fichier de sortie.
|
||||
Options disponibles :
|
||||
-c, --collate <int> Nb de pages successives à prendre pour chaque sélection. Contrainte : <int> > 0. [défaut: 1]
|
||||
|
||||
Sélection des pages:
|
||||
Les sélections peuvent comprendre les éléments suivants. Plusieurs sélection sont séparées par des virgules
|
||||
|
@ -47,10 +66,10 @@ Sélection des pages:
|
|||
n-m de la page n à m range (ie. 3-6)
|
||||
m-n pareil mais en sens inverse (ie. 6-3)
|
||||
z représente la dernière page du document (pour remplacer un n° de page)
|
||||
x Exclut la page (ex: x15) ou la rangée de pages (ex: x2-18)
|
||||
r compte à partir de la dernière page (ie. 3-r2)
|
||||
...:even pour une sélection donnée, ne conserve que que les pages paires (ie. 1-10:even)
|
||||
...:odd pareil mais pour les pages impaires
|
||||
+90: tourne le groupe de sélection vers la droite (ie. +90:1-5,8,z-12 tourne les pages 1 à 5,
|
||||
8 et de la dernière page à la 12è)
|
||||
+90: tourne le groupe de sélection vers la droite (ie. +90:1-5,8,z-12 tourne les pages 1 à 5, 8 et de la dernière page à la 12è)
|
||||
-90: pareil mais à gauche
|
||||
+180: pareil mais en bas
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var app = 'nvim'
|
||||
var app = 'helix'
|
||||
|
||||
var editors = [
|
||||
&emac=[
|
||||
|
|
273
aliases/vpn.elv
273
aliases/vpn.elv
|
@ -1,133 +1,148 @@
|
|||
use re
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/list
|
||||
|
||||
var vpnType = [
|
||||
&wireguard=$nil
|
||||
&vpn=$nil
|
||||
]
|
||||
|
||||
var shortcut = [
|
||||
&ca=ca.kaosx.ovh
|
||||
&fr=fr.kaosx.ovh
|
||||
&lu=luence-wg
|
||||
&lu2=luence-ovpn
|
||||
&cli=luence-client
|
||||
&nl=proton_nl5
|
||||
&jp=proton_jp2
|
||||
&us=proton_us3
|
||||
]
|
||||
|
||||
var next = [
|
||||
&ca.kaosx.ovh=fr.kaosx.ovh
|
||||
&fr.kaosx.ovh=luence-wg
|
||||
&luence-wg=luence-client
|
||||
&luence-ovpn=luence-client
|
||||
# &luence-client=proton_nl5
|
||||
# &proton_nl5=proton_us3
|
||||
# &proton_us3=proton_jp2
|
||||
]
|
||||
|
||||
fn -list {|&active=$false|
|
||||
var @argv = connection show
|
||||
if $active {
|
||||
set @argv = $@argv --active
|
||||
}
|
||||
nmcli $@argv | re:awk {|_ @name uuid tpe dev|
|
||||
if (has-key $vpnType $tpe) {
|
||||
str:join ' ' $name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -up {|name|
|
||||
nmcli connection up $name
|
||||
}
|
||||
|
||||
fn -down {|name|
|
||||
nmcli connection down $name
|
||||
}
|
||||
|
||||
fn -active {||
|
||||
-list &active=$true
|
||||
}
|
||||
|
||||
fn -is-active {|name|
|
||||
-active | list:contains $name
|
||||
}
|
||||
|
||||
fn -next {||
|
||||
var @n = (-active | list:first {|e| has-key $next $e })
|
||||
if (== 1 (count $n)) {
|
||||
put $next[$n[0]]
|
||||
} else {
|
||||
put ca.kaosx.ovh
|
||||
}
|
||||
}
|
||||
|
||||
fn -vpn-stop {||
|
||||
var @a = (-active)
|
||||
if (== (count $a) 0) {
|
||||
echo 'Aucune connexion active'
|
||||
} else {
|
||||
-active | each $-down~
|
||||
}
|
||||
}
|
||||
|
||||
fn -vpn-start {|name|
|
||||
if (has-key $shortcut $name) {
|
||||
set name = $shortcut[$name]
|
||||
}
|
||||
if (not (-list | list:contains $name)) {
|
||||
printf "Le VPN “%s” n’èxiste pas\n" $name
|
||||
} else {
|
||||
-active | each $-down~
|
||||
-up $name
|
||||
}
|
||||
}
|
||||
|
||||
fn -vpn-list {||
|
||||
var @act = (-active)
|
||||
-list | each {|n|
|
||||
if (list:contains $n $act) {
|
||||
echo (styled $n green)
|
||||
} else {
|
||||
echo $n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -vpn-help {||
|
||||
echo 'vpn: Active ou désactive les connections VPN'
|
||||
echo 'Usage:'
|
||||
echo ' help Affiche cette aide'
|
||||
echo ' list Liste les VPN disponibles'
|
||||
echo ' stop Arrête toutes les connexions VPN actives'
|
||||
echo ' <vpn> Active la connexion VPN donnée et désactive les autres'
|
||||
echo ' (sans argument) Active la prochaine connexion VPN et désactive les autres'
|
||||
}
|
||||
|
||||
fn -vpn {||
|
||||
-vpn-start (-next)
|
||||
}
|
||||
|
||||
edit:add-var vpn~ {|@argv|
|
||||
var c = (count $argv)
|
||||
if (== $c 0) {
|
||||
-vpn
|
||||
} elif (!= $c 1) {
|
||||
-vpn-help
|
||||
fail 'Arguments invalides'
|
||||
} else {
|
||||
var e = $argv[0]
|
||||
if (eq $e help) {
|
||||
-vpn-help
|
||||
} elif (eq $e list) {
|
||||
-vpn-list
|
||||
} elif (eq $e stop) {
|
||||
-vpn-stop
|
||||
} else {
|
||||
-vpn-start $e
|
||||
use flag
|
||||
use re
|
||||
use str
|
||||
use framagit.org/benjamin.vaudour/elv-lib/mods/map
|
||||
|
||||
var shortcuts = [
|
||||
&ca= ca.kaosx.ovh
|
||||
&fr= fr.kaosx.ovh
|
||||
&lu= luence-wg
|
||||
&cli= luence-client
|
||||
&fdn= fdn-openvpn
|
||||
]
|
||||
|
||||
var next = [
|
||||
&ca.kaosx.ovh= fr.kaosx.ovh
|
||||
&fr.kaosx.ovh= luence-wg
|
||||
&luence-wg= luence-client
|
||||
&luence-client= fdn-openvpn
|
||||
]
|
||||
|
||||
fn -start {|name| e:nmcli connection up $name > /dev/null }
|
||||
fn -stop {|name| e:nmcli connection down $name > /dev/null }
|
||||
fn -list {|&active=$false|
|
||||
var @args = connection show
|
||||
if $active {
|
||||
set @args = $@args --active
|
||||
}
|
||||
e:nmcli $@args | re:awk {|_ @name uuid tpe dev|
|
||||
var name = (str:join ' ' $name)
|
||||
if (has-value $shortcuts $name) {
|
||||
put [
|
||||
&name= $name
|
||||
&type= $tpe
|
||||
&active= (not-eq $dev --)
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn -name {|name| map:value-of &default=$name $shortcuts $name }
|
||||
fn -exists {|name| has-value [ (-list | each {|c| put $c[name] }) ] (-name $name) }
|
||||
fn -is-active {|name| has-value [ (-list &active=$true | each {|c| put $c[name] }) ] (-name $name) }
|
||||
|
||||
fn -next {||
|
||||
var @active = (-list &active=$true)
|
||||
var n = ca.kaosx.ovh
|
||||
if (> (count $active) 0) {
|
||||
set n = (map:value-of &default=$n $next $active[0][name])
|
||||
}
|
||||
|
||||
put $n
|
||||
}
|
||||
|
||||
fn help {|@rest|
|
||||
echo 'Usage: vpn [<action>] [<args>...]'
|
||||
echo 'Actions disponibles:'
|
||||
echo ' - list [(-a|--active)]'
|
||||
echo ' - start <name>'
|
||||
echo ' - stop [<name>]'
|
||||
}
|
||||
|
||||
fn list {|@rest|
|
||||
var flags _ = (flag:parse-getopt $rest [
|
||||
[&short=a &long=active &arg-optional=$true]
|
||||
])
|
||||
var active = (> (count $flags) 0)
|
||||
|
||||
var @connections = (-list &active=$active)
|
||||
if (== (count $connections) 0) {
|
||||
echo (styled 'Aucun VPN' yellow)
|
||||
} else {
|
||||
each {|c|
|
||||
if $c[active] {
|
||||
printf "%s (%s)\n" (styled $c[name] green bold) $c[type]
|
||||
} else {
|
||||
printf "%s (%s)\n" $c[name] $c[type]
|
||||
}
|
||||
} $connections
|
||||
}
|
||||
}
|
||||
|
||||
fn stop {|@rest|
|
||||
if (== (count $rest) 0) {
|
||||
var @actives = (-list &active=$true | each {|c| put $c[name] })
|
||||
if (== (count $actives) 0) {
|
||||
echo (styled 'Aucun VPN actif' yellow)
|
||||
} else {
|
||||
stop $@actives
|
||||
}
|
||||
} else {
|
||||
each {|n|
|
||||
var n = (-name $n)
|
||||
if (not (-is-active $n)) {
|
||||
echo (styled (printf '%s non actif' $n) yellow)
|
||||
} else {
|
||||
if ?(-stop $n) {
|
||||
printf "%s %s\n" (styled $n bold) (styled désactivé bold red)
|
||||
} else {
|
||||
echo (styled (printf 'Arrêt de %s échoué' $n) red)
|
||||
}
|
||||
}
|
||||
} $rest
|
||||
}
|
||||
}
|
||||
|
||||
fn start {|name|
|
||||
var name = (-name $name)
|
||||
if (-is-active $name) {
|
||||
echo (styled (printf '%s est déjà actif' $name) yellow)
|
||||
} elif (not (-exists $name)) {
|
||||
echo (styled (printf '%s inconnu' $name) yellow)
|
||||
} else {
|
||||
var @actives = (-list &active=$true | each {|c| put $c[name] })
|
||||
if (> (count $actives) 0) {
|
||||
stop $@actives
|
||||
}
|
||||
if ?(-start $name) {
|
||||
printf "%s %s\n" (styled $name bold) (styled activé bold green)
|
||||
} else {
|
||||
echo (styled (printf 'Démarrage de %s échoué' $name) red)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn next {|@name|
|
||||
if (== (count $name) 0) {
|
||||
start (-next)
|
||||
} else {
|
||||
start $name[0]
|
||||
}
|
||||
}
|
||||
|
||||
var actions = [
|
||||
&help= $help~
|
||||
&list= $list~
|
||||
&start= $start~
|
||||
&stop= $stop~
|
||||
]
|
||||
|
||||
var action = $next~
|
||||
|
||||
if (and (> (count $argv) 0) (has-key $actions $argv[0])) {
|
||||
set action argv = $actions[$argv[0]] $argv[1..]
|
||||
}
|
||||
|
||||
$action $@argv
|
||||
}
|
||||
|
|
9
rc.elv
9
rc.elv
|
@ -2,18 +2,19 @@
|
|||
set-env BAT_PAGER 'less -RF'
|
||||
set-env EXA_COLORS 'da=36:*.pdf=4:*.doc=4:*.xls=4:*.docx=4:*.xlsx=4:*.odt=4:*.ods=4'
|
||||
#set-env EDITOR vim
|
||||
set-env EDITOR nvim
|
||||
#set-env EDITOR nvim
|
||||
#set-env EDITOR kak
|
||||
#set-env EDITOR hx
|
||||
set-env EDITOR hx
|
||||
#set-env VISUAL 'vim -R'
|
||||
set-env VISUAL 'nvim -R'
|
||||
#set-env VISUAL 'nvim -R'
|
||||
#set-env VISUAL 'kak -ro'
|
||||
#set-env VISUAL hx
|
||||
set-env VISUAL hx
|
||||
set-env CURRENT_SHELL 'elvish'
|
||||
set-env STARSHIP_CONFIG ~/.config/starship/starship.toml
|
||||
set-env PERL5LIB /home/benjamin/perl5/lib/perl5
|
||||
set-env NODE_OPTIONS --openssl-legacy-provider
|
||||
set-env QSV_SNIFF_DELIMITER 1
|
||||
set-env PHP_CS_FIXER_IGNORE_ENV 1
|
||||
set @paths = /home/benjamin/{bin,Go/bin,perl5/bin} $@paths
|
||||
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue