2014-08-17 22:54:05 +02:00
# /etc/zsh/zshrc ou ~/.zshrc
# Fichier de configuration principal de zsh, lu au lancement des shells interactifs
# (et non des shells d'interprétation de fichier)
# Formation Debian GNU/Linux par Alexis de Lattre
# http://formation-debian.via.ecp.fr/
################
# 1. Les alias #
################
# Gestion du 'ls' : couleur & ne touche pas aux accents
alias ls = 'ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable'
# Copie en récursif et qui garde la date des fichiers copiés
#alias cp='cp -Rp'
2015-02-26 14:20:54 +01:00
alias cp = 'cp -R' # **cp** copy files and directories recursively # TEST
2014-08-17 22:54:05 +02:00
# Copie distante, ajout de la récursivité tout le temps:
alias scp = 'scp -r'
# Demande confirmation avant d'écraser un fichier
alias cP = 'cp --interactive'
alias mv = 'mv --interactive'
alias rm = 'rm --interactive'
# Raccourcis pour 'ls'
alias ll = 'ls -l'
alias la = 'ls -lA'
alias llm = 'ls -l | $PAGER'
alias lll = 'ls -l | less'
##Classer par date
alias llt = 'ls -l -t -h -r'
alias lld = 'ls -l -d */ -h'
alias l.= 'ls -d .*'
alias lr = 'ls -R | grep ":$" | sed -e ' \' 's/:$//' \' ' -e ' \' 's/[^-][^\/]*\//--/g' \' ' -e ' \' 's/^/ /' \' ' -e ' \' 's/-/|/' \' ''
# Faire en sorte que sudo puisse également utiliser les alias! (c'est l'espace qui fait toute la différence)
# `man zshall` partie Aliasing: "If the text ends with a space, the next word in the shell input is treated as though it were in command position for
# purposes of alias expansion. "
2014-11-17 11:04:48 +01:00
alias sudo = 'sudo '
alias s = 'sudo '
2014-08-17 22:54:05 +02:00
if [ ${ USER } != "root" ] ; then
alias si = 'sudo iptables -L -vn '
alias sp = 'sudo puppet agent -t '
alias sv = 'sudo vi '
2015-02-26 14:20:54 +01:00
alias sz = 'sudo -i '
2014-08-17 22:54:05 +02:00
else
alias si = 'iptables -L -vn '
alias sp = 'puppet agent -t '
alias sv = 'vi '
fi
# Raccourcis pour cat
alias ca = 'cat -n'
# Envoyer une notification via libnotify-bin (fin d'une commande, ...)
# Nécessite le paquet libnotify-bin
alias alert = 'notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e ' \' 's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//' \' ')"'
# Recherche d'un mot dans des fichiers
alias grep = 'grep --color=always -i '
alias gerp = 'grep -i'
##Sensisble à la casse
alias Grep = 'grep '
# Nettoyage de l'écran
alias c = 'clear'
# Liste le contenu du dossier
alias dir = 'dir --color=always'
# Pour utiliser less avec de la couleur par défaut
alias less = 'less -r'
#alias less='less --quiet'
# Page de manuel en anglais
alias mane = "LANG=C man "
# Affichage le résultat de la commande 'mount' en colonne
mount | column -t
# Afficher les lignes trop longues sur la ligne suivante plutot que de remplacer par un "$":
alias most = 'most -w'
# Commandes de gestion des paquets pour aptitude ou yum
if [ -d /etc/apt ] ; then
alias show = 'aptitude show'
alias se = 'aptitude search'
2015-02-26 14:48:44 +01:00
alias ins = 'sudo aptitude install'
alias insexperimental = 'sudo aptitude -t experimental install'
alias up = 'sudo aptitude update'
alias upg = 'sudo aptitude upgrade'
alias fup = 'sudo aptitude full-upgrade'
alias apcl = 'sudo aptitude clean'
alias apurge = "sudo aptitude purge '~c'"
2014-08-17 22:54:05 +02:00
alias version = 'apt-show-versions'
alias pol = 'apt-cache policy '
else
alias up = 'yum update'
alias show = 'yum info'
alias se = 'yum search'
alias ins = 'yum install'
alias version = 'yum info &1|grep "Version"'
fi
# Espace disque
alias df = 'df -kTh'
2015-03-05 16:00:23 +01:00
alias dus = 'du -ch|sort -h'
alias dua = 'du -ach|sort -h'
2014-08-17 22:54:05 +02:00
# Gestion des processus:
# Si htop n'est pas installé sur la machine:
if [ ! -f "`which htop`" ] ; then
alias htop = top
fi
# Qu'est-ce qui consomme de la mémoire vive sur le système
alias wotgobblemem = 'ps -o time,ppid,pid,nice,pcpu,pmem,user,comm -A | sort -n -k 6 | tail -15'
2015-03-05 16:00:23 +01:00
# Afficher uniquement le processus à partir de ps
alias px = 'ps faux|grep -v grep|grep -i -e VSZ -e'
2014-08-17 22:54:05 +02:00
# Décompression
alias untargz = 'tar -zxvf'
alias untarbz2 = 'tar -jxvf'
2014-09-08 10:15:54 +02:00
# Terminal multiplexer
2015-06-08 14:26:45 +02:00
alias toto = 'tmux -f ~/.tmux/splitHP a -t 0 '
2014-08-17 22:54:05 +02:00
alias ci = 'screen -x ssh || screen -c ~/.screen/scr.ssh_ci'
## Git
# Télécharger et merge les maj
alias gpull = 'git pull '
# Appliquer les changements dans le dépôt
function commit {
git commit -m "`echo " $* " | sed -e 's/^./\U&\E/g'`"
}
alias gco = 'git commit'
alias gcom = 'commit '
# Envoyer les changements au dépôt maitre
alias gpush = 'git push origin master'
# Supprimer un fichier du dépôt
alias grm = 'git rm '
# Déplacer/rennomer un fichier
alias gmv = 'git mv '
# Montrer l'état de la branche active
alias gstatus = 'git status'
# Recherche dans le dépôt en ajoutant le numéro de la ligne et de la couleur
alias ggrep = 'git grep --color -n -P'
# Voir les logs d'un dépôt git (à la manière de gitk, dans un terminal)
alias glog = " git log --graph --full-history --all --color --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' | $PAGER "
# Lister les fichiers de configuration inutiles
alias purge = 'grep-status -n -sPackage -FStatus config-files'
## Alias avec pipe
alias -g H = '| head'
alias -g T = 'tail -f'
2015-03-05 16:00:23 +01:00
alias -g G = '| grep -v grep | grep'
2014-08-17 22:54:05 +02:00
alias -g L = '| less'
alias -g M = "| most"
2015-08-08 22:46:53 +02:00
alias -g S = "| sort"
alias -g W = "| wc -l"
2014-08-17 22:54:05 +02:00
alias -g B = "&|"
alias -g HL = "--help"
alias -g MM = "2>&1 | most"
alias -g LL = "2>&1 | less"
alias -g CA = "2>&1 | cat -A"
alias -g NE = "2> /dev/null"
alias -g NUL = "> /dev/null 2>&1"
## Affichage de l'historique
if [ " $PAGER " = "most" ] ; then
# En commencant par la fin avec most (bidouillage, on est pas sensé avoir ):
alias hist = " fc -El 0 | most + $HISTSIZE "
#alias hist="most +$HISTSIZE ~/.zsh/history"
# Une fois dans un fichier avec most, la touche 'B' permet d'aller à la fin du fichier
else
# En commencant par la fin avec less:
alias hist = "fc -El 0 | less +G"
#alias hist="less +G ~/.zsh/history"
fi
2015-03-05 16:00:23 +01:00
alias ghist = 'fc -El 0 | grep'
2014-08-17 22:54:05 +02:00
## Gestion des répertoires
alias u = 'cd ..'
alias cd..= 'cd ..'
alias ..= 'cd ..'
alias ...= 'cd ../..'
alias ....= 'cd ../../..'
# Revenir dans le dossier dans lequel on se trouvait précédemment
alias cd-= 'cd -'
# Afficher la pile des dossiers:
alias dirs = 'dirs -v'
# Créer les répertoires précédents si ils n'existent pas
alias mkdir = 'mkdir -p'
# Affiche l'arborescence du répertoire courant
#alias tree="find . | sed 's/[^/]*\//| /g;s/| *\([^| ]\)/+--- \1/'"
#La commande tree "basique" fait ça très bien ...
# Affiche la variable $PATH ligne par ligne
2014-09-27 11:19:19 +02:00
alias path = 'printf %s $PATH | tr ":" "\n" '
2014-08-17 22:54:05 +02:00
# Edite le dernier fichier d'un dossier
## Fonctionement:
## (. correspond au fichier
## om les classent par date de modification
## [1] choisit le premier
## désactive les options GLOB_DOTS
alias vil = 'vi *(.om[1]^D)'
# Lancer vi pour qu'il ne conserve aucune trace du fichier
## Faire précéder la commande d'un espace empêche l'enregistrement dans l'historique du shell
alias vnb = 'vi -n "+set noundofile" "+set nobackup"'
# Différence entre deux fichiers
alias diff = 'colordiff -u'
2014-09-27 11:19:19 +02:00
alias diffs = '\diff --side-by-side'
2014-08-17 22:54:05 +02:00
# Recherche toutes les occurences de l'arguments passé en paramètre dans l'historique des commandes
alias param = 'fc -l 0 | grep'
# Multimédia
##Extraire la piste audio d'un .avi
alias avi2wav = 'mplayer -vc dummy -vo null -ao pcm:file=video.wav'
##Modifie la bar de progression du gestionnaire de téléchargement Axel
alias axel = 'axel -a --num-connection=20'
# Calculatrice en ligne de commande
alias caltos = 'bc'
#alias df='df --human-readable'
#alias du='du --human-readable'
alias m = 'mutt -y'
alias md = 'mkdir'
alias rd = 'rmdir'
#Internet
## Créer un mini serveur web à partir du dossier courant (http://localhost:8002)
alias httpserv = 'python -m SimpleHTTPServer'
## Créer un mini serveur web à partir du quel les utilisateurs peuvent uploader des fichiers sur la machine
alias httpup = " python /home/ ${ USER } /bin/droopy -m \"Salut, c'est Bob l'éponge, envoi moi un fichier stp.\" -p /home/ ${ USER } /avatar.png -d /media/data/download "
## Limite l'envoi à 3 requêtes pour ping
alias ping = "ping -c 3"
2015-06-08 14:26:45 +02:00
alias ping6 = "ping6 -c 3"
2014-08-17 22:54:05 +02:00
## JOSM
alias josm = "java -jar -Xmx2048M /opt/josm-tested.jar"
#######################################
#Ouverture d'un programme en fonction
#de l'extension du fichier
#######################################
alias -s txt = '$PAGER '
alias -s odt = 'libreoffice --writer '
alias -s rtf = 'libreoffice --writer '
alias -s doc = 'libreoffice --writer '
alias -s ods = 'libreoffice --calc '
alias -s xls = 'libreoffice --calc '
alias -s html = $BROWSER
alias -s org = $BROWSER
alias -s php = $BROWSER
alias -s com = $BROWSER
alias -s net = $BROWSER
alias -s png = 'mirage '
alias -s jpg = 'mirage '
alias -s gif = 'mirage '
alias -s mp4 = 'smplayer '
alias -s avi = 'smplayer '
alias -s flv = 'smplayer '
alias -s pdf = 'evince '
alias -s log = 'tail -f'
alias -s conf = 'vim '
alias -s gz = 'gunzip '
alias -s bz2 = 'tar -xjvf'
#######################################
# Raccourcis pour les dossier
# Pour y accéder, faire ~NOM_DU_RACCOURCIS
#######################################
hash -d zsh = "/etc/zsh"
hash -d dl = "/media/udata/download/"
hash -d sid = "/media/udata/config_debian"
hash -d smb = "/etc/samba/"
# Inutile mais fun :p
##Affiche le calendrier et le jour courant en couleur
#alias ccal='var=$(cal -m); echo "${var/$(date +%-d)/$(echo -e "\033[1;31m$(date +%-d)\033[0m")}"'
alias ccal = 'var=$(cal); echo "${var/$(date +%-d)/$(echo -e "\033[1;31m$(date +%-d)\033[0m")}"'
##Commande utilisant cowsay (ou PONYSAY!!) pour afficher un message
function bonjour( ) {
MIN_TIME = $( date +%M)
MODULO_MIN = $(( $MIN_TIME % 2 ))
if [ $MODULO_MIN -eq 0 ] ; then
#echo Bonjour $USER, nous sommes le `date +"%A %e %B %Y"`, et il est : `date +"%H"` h `date +"%M"` | cowsay -f $(/bin/ls /usr/share/cowsay/cows -1 | head -n $(expr $$$(date +%s) % $(ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1)
/home/${ USER } /bin/bash_quote | cowsay -f $( /bin/ls /usr/share/cowsay/cows -1 | head -n $( expr $$ $( date +%s) % $( ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1)
else
#echo Bonjour $USER, nous sommes le `date +"%A %e %B %Y"`, et il est : `date +"%H"` h `date +"%M"` | ponythink
2014-09-27 11:19:19 +02:00
/home/${ USER } /bin/bash_quote | ponythink
2014-08-17 22:54:05 +02:00
fi
}
##Affiche quelques statistiques à propos de l'ordinateur
alias stat_sys = "echo ' ' && uname -a && echo ' '&& uptime &&echo ' '&& df && echo ' '"
#####################################
#####FONCTIONS
######################################
## Verrouiller le shell avec vlock
#function TRAPALRM() { vlock }
##Cree le repertoire et va dedans
function mkcd( ) {
mkdir $1 && cd $1
}
#liste les alias et functions
function listalias( ) {
cat /etc/zsh/zshrc | egrep "alias|function" | grep -v "^#" | $PAGER
}
#Récupère l'adresse IP publique
function ippub( )
{
#curl ifconfig.me
2014-09-27 11:19:19 +02:00
#lynx --dump http://www.whatismyip.com/|grep Your|awk '{print $4}'
#wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d" " -f 6 | cut -d\< -f 1
dig +short myip.opendns.com @resolver1.opendns.com
2014-08-17 22:54:05 +02:00
}
#Récupère l'adresse IP (privee)
function ippriv( )
{
2014-09-27 11:19:19 +02:00
printf 'eth0: %s\n' $( ip a s eth0| grep "inet " | awk '{print $2}' )
printf 'wlan0: %s\n' $( ip a s wlan0| grep "inet " | awk '{print $2}' )
2014-08-17 22:54:05 +02:00
}
#Renomme les fichiers en minuscule
function lowercase( )
{
2014-09-27 11:19:19 +02:00
for file in *; do
2014-08-17 22:54:05 +02:00
filename = ${ file ##*/ }
case " $filename " in
2014-09-27 11:19:19 +02:00
*/*) dirname = = ${ file %/* } ; ;
*) dirname = .; ;
2014-08-17 22:54:05 +02:00
esac
2014-09-27 11:19:19 +02:00
nf = $( printf $filename | tr A-Z a-z)
2014-08-17 22:54:05 +02:00
newname = " ${ dirname } / ${ nf } "
if [ " $nf " != " $filename " ] ; then
mv " $file " " $newname "
2014-09-27 11:19:19 +02:00
printf 'lowercase: %s --> %s\n' ${ file } ${ newname }
2014-08-17 22:54:05 +02:00
else
2014-09-27 11:19:19 +02:00
printf 'lowercase %s not changed\n' ${ file }
2014-08-17 22:54:05 +02:00
fi
done
}
##Capture d'écran
function printscreen( )
{
scrot -s -e 'gimp $f ; rm -rf $f'
}
## Latex:
##Redéfinition de pdflatex:
# La commande pdflatex est exécutée deux fois pour permettre la construction de l'index
function pdflatex( )
{
# On récupère le nom du fichier sans l'extension
file_name = " ${ 1 : r } "
# Le fichier avec l'extension pdf
pdf = " ${ file_name } .pdf "
# Dossier temporaire
temp_dir = "temp"
# On supprime le fichier pdf si il est présent
if [ -f " ${ pdf } " ] ; then
rm -rf " ${ pdf } "
fi
# Si le répertoire temporaire n'existe pas, on le crée
if [ ! -d " ${ temp_dir } " ] ; then
mkdir " ${ temp_dir } "
fi
# On exécute la commande pour créer le pdf
/usr/bin/pdflatex -output-directory ${ temp_dir } $1
/usr/bin/pdflatex -output-directory ${ temp_dir } $1
# On place le fichier pdf qui est dans le répertoire temporaire dans le répertoire courant
mv -f " ${ temp_dir } " /*.pdf .
}
#Éteint un pc sous windows à distance
#Nécessite le paquet samba-common
# Arguments:
# ${1}: l'ip de la machine
# ${2}: le nom d'utilisateur
# ${3}: le mot de passe de l'utilisateur
function eteint( )
{
net rpc shutdown -f -I $1 -U $2 %$3 -t 10 -C "Arrêt en cours..."
}
# Calculatrice en ligne de commande
function calc( )
{
echo " ${ 1 } " | bc -l
}
# Afficher le code retour de la commande précédente
function cmd_status {
local exit_code = $? # exit code of command
local count = $( jobs | wc -l) # no. of background jobs
# Report no. of background jobs if >0
if [ $count -gt 0 ] ; then
echo -n " %{ $fg [cyan]%}⎇ %j "
fi
# Report exit code
if [ $exit_code -ne 0 ] ; then
echo -n " %{ $fg [yellow]%}%?%{ $fg [red]%} ✖%{ $reset_color %} "
else
echo -n " %{ $fg [green]%}✔%{ $reset_color %} "
fi
}
# Affiche un rappel des raccourcis pour se déplacer dans vim
function rappel_vim( )
{
echo " \
##########################################
# Rappel basique pour VIM
##########################################
# Déplacements basiques :
H pour se déplacer vers la gauche
J pour se déplacer vers le bas
K pour se déplacer vers la droite
L pour se déplacer vers la droite
# Déplacements avancés sur une ligne :
e pour aller à la fin du mot suivant
2014-09-27 11:19:19 +02:00
w pour aller au début du mot suivant
2014-08-17 22:54:05 +02:00
b pour aller à la fin du mot précédent
0 pour aller en début de ligne
$ pour aller en fin de ligne
^ pour aller au premier caractère de la ligne qui n' est pas un espace ni une tabulation
f<c> pour aller jusqu'au caractère <c> vers l' avant
2014-09-27 11:19:19 +02:00
3f<c> pour aller jusqu'à la 3ème occurence du caractère <c> vers l' avant
2014-08-17 22:54:05 +02:00
F<c> pour aller jusqu'au caractère <c> vers l' arrière
2014-09-27 11:19:19 +02:00
nF<c> pour aller jusqu'à la nème occurence du caractère <c> vers l' arrière
2014-08-17 22:54:05 +02:00
t<c> pour aller jusqu'au caractère <c> vers l' avant en s' arrêtant avant
T<c> pour aller jusqu'au caractère <c> vers l' arrière en s' arrêtant avant
# Déplacement dans le document :
gg pour aller au début du document
G pour aller à la fin du document
nG pour aller à la ligne <n>
:<n> pour aller à la ligne <n>
2014-09-27 11:19:19 +02:00
% pour aller à la parenthèse ( acollade, crochet) correspondant
2014-08-17 22:54:05 +02:00
# Copier/coller avancé
\" ayy Copier la ligne courante dans le buffer \" a\"
\" 5byy Copier les 5 lignes sous le curseur dans le buffer \" b\"
<MODE_VISUEL>\" ey Copier les lignes sélectionnées dans le buffer \" e\"
# undo & redo
2014-09-27 11:19:19 +02:00
u pour annuler pour annuler la dernière modification
2014-08-17 22:54:05 +02:00
CTRL+R pour refaire la dernière modification
# Gestion du texte
~ pour inverser la casse du texte sélectionné
# Supprimer le texte du curseur à la fin de la ligne
<mode commande> d$
<mode insertion> CTRL-o D
# Supprimer le texte du curseur au début de la ligne
<mode commande> d^
" | $PAGER
}
# Affiche un rappel des raccourcis pour se déplacer dans vim
function rappel_vim_avance( )
{
echo " \
##########################################
# Utilisation un peu plus avancée de VIM
##########################################
# nom fichier
# Avec par exemple un fichier qui s'appelle fichier.tex dans /home/limax/Documents/
# est le nom du fichier en cours
:!echo % ( renvoie /Documents/fichier.tex )
:!echo %:r ( renvoie /Documents/fichier )
:!echo %:e ( renvoie tex )
:!echo %:t ( renvoie fichier.tex )
:!echo %:p ( renvoie /home/limax/Documents/fichier.tex )
:!echo %:t ( renvoie fichier.tex )
:!echo %:h ( renvoie Documents)
# Par exemple pour ouvrir le pdf avec lesspipe
:!lesspipe %:r.pdf
# Indentation
# Pour réindenter du texte:
mode visuel
- sélectionner toutes les lignes à indenter correctement
touche \" = \"
# Pour décaler plusieurs lignes de plusieurs tabulations:
mode visuel
- sélectionner toutes les lignes à décaler
:>>>
# Commande
# Pour exécuter une seule commande à partir du mode insertion
<mode insertion> CTRL-o suivi de la commande à exécuter
# Code touche
# Pour afficher le code clavier d'une touche spéciale en mode insertion:
<mode insertion> CTRL-V
# Pour afficher le code interne d'une touche spéciale:
<mode insertion> CTRL-K
# Pour obtenir le code ascii d'un caractère:
ga
# Plier/déplier
zm Plier tout le document sur un niveau de plus
zr Déplier tout le document sur un niveau de plus
zc Plier un bloc/fonction/class
zo Déplier un bloc/fonction/class
" | $PAGER
}
# Affiche un rappel pour l'édition de fichier Latex
function rappel_latex( )
{
echo " \
-\\ /- Permet d' afficher -- et non un tiret cadratin
Ligne vide Permet un retour à la ligne entre deux textes
\\ ldots Affiche correctement \" ...\"
# itemize
Mettre un \\ vspace{ 0.5cm} après une liste?
Laisser une ligne vide après une commande root dans une liste?
# À faire
Ajouter un style pour les notes d' informations
Ajouter un style pour les notes importantes
" | $PAGER
}
## Vérifier les logins et logouts de tous les comptes incluant le mien.
watch = all
# Vérifie toutes les 30 secondes
logcheck = 30
# Change le format de watch pour quelques chose avec plus d'informations
# %n = username, %M = hostname, %a = action, %l = tty, %T = time,
# %W = date
WATCHFMT = "%n from %M has %a tty%l at %T %W"
# Crypte le fichier passer en paramètre en utilisant le certificat public
# de l'utilisateur.
# Arguments:
# ${1}: fichier à crypter
# ${2}:
function crypt( )
{
openssl smime -encrypt -aes128 -in ${ 1 } -out .${ 1 } .ls ~/.openssl/mycert.crt
}
# Décrypte le fichier passer en paramètre en fonction de la clef ssl de
# l'utilisateur et trouve la ligne contenant le mot rechercher par l'user
# Arguments:
# ${1}: le fichier à décrypter
# ${2}: le paramètre rechercher dans le fichier
function getpdw( )
{
openssl smime -decrypt -in ${ 1 } -inkey ~/.openssl/mykey.key | grep ${ 2 }
}
# Décrypte le fichier passer en paramètre en fonction de la clef ssl de
# l'utilisateur et le fichier de sorti est le second paramètre
# Arguments:
# ${1}: le fichier à décrypter
# ${2}: le fichier de sorti
function decrypt( )
{
openssl smime -decrypt -in ${ 1 } -out ${ 2 } -inkey ~/.openssl/mykey.key
}
# Traduire en français avec Gogole:
function tradfr( )
{
wget -U "Mozilla/5.0" -qO - " http://translate.google.com/translate_a/t?client=t&text= ${ * } &sl=auto&tl=fr " | sed 's/\[\[\[\"//' | cut -d \" -f 1
}
# Traduire du français à l'anglais avec Gogole:
function traden( )
{
wget -U "Mozilla/5.0" -qO - " http://translate.google.com/translate_a/t?client=t&text= ${ * } &sl=fr&tl=en " | sed 's/\[\[\[\"//' | cut -d \" -f 1
}
# Traduire le texte (1er argument) de la langue source (2nd argument) dans la langue de destination (3ème argument)
function translate( )
{
wget -U "Mozilla/5.0" -qO - " http://translate.google.com/translate_a/t?client=t&text= ${ 1 } &sl= ${ 2 } &tl= ${ 3 } " | sed 's/\[\[\[\"//' | cut -d \" -f 1
}
################################################
# 2. Prompt et définition des touches basiques #
################################################
# Prompt couleur (la couleur n'est pas la même pour le root et
# pour les simples utilisateurs)
# Définition des couleurs:
bleu_clair = "[36;1m"
bleu_fonce = "[34;1m"
rouge = "[31m"
jaune = "[33m"
blanc = "[37m"
vert = "[32m"
couleur_normale = "[0m"
# Définition du texte du prompt
heure = " %{ $bleu_clair %}%T "
user = " %{ $bleu_fonce %}%n "
user_root = " %{ $rouge %}%n "
at = " %{ $jaune %}@ "
host = " %{ $blanc %}%m "
repertoire_courant = " %{ $vert %}%c "
repertoire_absolu = " %{ $vert %}%d "
# Chemin du répertoire courant en relatif à ~
repertoire_relatif = " %{ $vert %}%~ "
root = " %{ $jaune %}%# "
noroot = " %{ $jaune %}%% "
normal = " %{ $couleur_normale %} "
# Définition du prompt
if [ "`id -u`" -eq 0 ] ; then ## Root
export PS1 = " $heure $user_root $at $host $repertoire_courant $root $normal "
# export PS1="%{ $bleu_clair%T %{ $rouge%n%{ $jaune@%{ $blanc%m %{ $vert%c%{ $jaune%#%{ [0m%} "
else ## Simple utilisateur
export PS1 = " $heure $user $at $host $repertoire_courant $noroot $normal "
fi
# Prise en charge des touches [début], [fin] et autres
typeset -A key
key[ Home] = ${ terminfo [khome] }
key[ End] = ${ terminfo [kend] }
key[ Insert] = ${ terminfo [kich1] }
key[ Delete] = ${ terminfo [kdch1] }
key[ Up] = ${ terminfo [kcuu1] }
key[ Down] = ${ terminfo [kcud1] }
key[ Left] = ${ terminfo [kcub1] }
key[ Right] = ${ terminfo [kcuf1] }
key[ PageUp] = ${ terminfo [kpp] }
key[ PageDown] = ${ terminfo [knp] }
[ [ -n " ${ key [Home] } " ] ] && bindkey " ${ key [Home] } " beginning-of-line
[ [ -n " ${ key [End] } " ] ] && bindkey " ${ key [End] } " end-of-line
[ [ -n " ${ key [Insert] } " ] ] && bindkey " ${ key [Insert] } " overwrite-mode
[ [ -n " ${ key [Delete] } " ] ] && bindkey " ${ key [Delete] } " delete-char
[ [ -n " ${ key [Up] } " ] ] && bindkey " ${ key [Up] } " up-line-or-history
[ [ -n " ${ key [Down] } " ] ] && bindkey " ${ key [Down] } " down-line-or-history
[ [ -n " ${ key [Left] } " ] ] && bindkey " ${ key [Left] } " backward-char
[ [ -n " ${ key [Right] } " ] ] && bindkey " ${ key [Right] } " forward-char
[ [ -n " ${ key [PageUp] } " ] ] && bindkey " ${ key [PageUp] } " history-beginning-search-backward
[ [ -n " ${ key [PageDown] } " ] ] && bindkey " ${ key [PageDown] } " history-beginning-search-forward
2015-02-26 14:20:54 +01:00
# ctrl+← and ctrl+→ issue
bindkey "^[[1;5C" vi-forward-word-end
bindkey "^[[1;5D" backward-word
2014-08-17 22:54:05 +02:00
# Titre de la fenêtre d'un xterm
case $TERM in
xterm*)
precmd ( ) { print -Pn "\e]0;%n@%m: %~\a" }
; ;
esac
# Gestion de la couleur pour 'ls' (exportation de LS_COLORS)
if [ -x /usr/bin/dircolors ]
then
if [ -r ~/.dir_colors ]
then
eval "`dircolors ~/.dir_colors`"
elif [ -r /etc/dir_colors ]
then
eval "`dircolors /etc/dir_colors`"
else
eval "`dircolors`"
fi
fi
#######################################
# 3. Comportement ligne de commandes #
#######################################
# La ligne de commande dans zsh peut fonctionner suivant différents schémas (options).
# Les principaux que je vais utiliser sont fait pour la ligne de commande dans zhs se
# comporte à la vim. Il y a donc un mode commande/normal et un mode insertion.
# Afficher le mode courant dans le prompt de droite (normal|insertion)
function zle-line-init zle-keymap-select {
RPS1 = " $( cmd_status) ${ ${ KEYMAP /vicmd/-CMD- } /(main|viins)/-INS- } "
RPS2 = $RPS1
zle reset-prompt
}
# easy color names in this config
autoload -U colors && colors
# Chargement des keymaps
zle -N zle-line-init
zle -N zle-keymap-select
### Raccourcis communs à tous les modes
autoload -U edit-command-line
zle -N edit-command-line
bindkey ' ' edit-command-line # Ouvrir la commande actuelle dans l'éditeur
bindkey ' ' history-incremental-search-backward # Recherche incrémentale qui monte dans l'historique
#bindkey ' ' history-incremental-search-forward # Recherche incrémentale qui descend dans l'historique
### Raccourcis spécifiques au mode insertion
bindkey -M viins ' ' beginning-of-line # Début de ligne
bindkey -M viins ' ' vi-forward-blank-word-end # Fin du mot courant
#bindkey -M viins ' ' vi-forward-blank-word # Début du mot suivant
bindkey -M viins ' ' vi-backward-word # Début du mot précédent
bindkey -M viins ' ' vi-find-prev-char # Rechercher la précédente occurence d'une lettre
#bindkey -M viins ' ;' vi-repeat-find # Aller à la prochaine occurence de la lettre recherchée
### Raccourcis spécifiques au mode commande
# Le mode commande dispose déjà de la plupart d'un fonctionnement très semblable
# au mode normal de vim. Seul problème pour le moment, l'absence d'un mode visuel.
###########################################
# 4. Options de zsh (cf 'man zshoptions') #
###########################################
# Je ne veux JAMAIS de beeps
unsetopt beep
unsetopt hist_beep
unsetopt list_beep
# Redirection de la sortie:
# >| doit être utilisés pour pouvoir écraser un fichier déjà existant ;
# le fichier ne sera pas écrasé avec '>'
unsetopt clobber
# Ctrl+D est équivalent à 'logout'
unsetopt ignore_eof
# Affiche le code de sortie si différent de '0'
setopt print_exit_value
# Demande confirmation pour 'rm *'
unsetopt rm_star_silent
# Attend 10 secondes avant d'exécuter une commande rm qui contient un * (asterisk).
setopt rmstarwait
# Correction orthographique des commandes
# Désactivé car, contrairement à ce que dit le "man", il essaye de
# corriger les commandes avant de les hasher
setopt correct
# Si on utilise des jokers dans une liste d'arguments, retire les jokers
# qui ne correspondent à rien au lieu de donner une erreur
setopt nullglob
# Désactivé le raccourcis '='
# Par défaut, `ls -l =vim` indiquera l'emplacement de vim.
# =vim équivaut à `which vim`
#setopt noequals
## Activation des fonctions internes de ZSH:
# Liste des fonctions disponibles:
#zcalc : une calculatrice (plus besoin de bc ou autres expr)
#zargs : un super xargs
#zmv : une commande permettant de faire du renommage/déplaçage en masse de fichiers.
#zftp : un client ftp natif
autoload -U zfinit
zfinit
# Les jobs qui tournent en tâche de fond sont nicé à '0'
unsetopt bg_nice
# N'envoie pas de "HUP" aux jobs qui tourent quand le shell se ferme
unsetopt hup
# Lancer le manuel en se placant sur une commande et en faisant {ESC,ALT}+{H,h}
autoload -U run-help
## Gestion de la pile des dossiers:
# Taille maximale de la pile placé dans zshenv
# L'exécution de "cd" met le répertoire d'où l'on vient sur la pile
setopt auto_pushd
# Ignore les doublons dans la pile
setopt pushd_ignore_dups
# N'affiche pas la pile après un "pushd" ou "popd"
setopt pushd_silent
# Inverse l'action de cd +1 et cd +1
setopt pushdminus
# "pushd" sans argument = "pushd $HOME"
setopt pushd_to_home
## Pour bien utiliser la pile:
# `dirs` va afficher la pile
# `cd -NUMÉRO` ira dans le dossier correspondant au numéro du dossier dans la pile
## Dirstack
DIRSTACKSIZE = 20
setopt autopushd pushdsilent pushdtohome
## Remove duplicate entries
setopt pushdignoredups
## This reverts the +/- operators.
setopt pushdminus
#DIRSTACKFILE="$HOME/.zsh/cache/dirs"
#if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then
#dirstack=( ${(f)"$(< $DIRSTACKFILE)"} )
#[[ -d $dirstack[1] ]] && cd $dirstack[1]
#fi
#chpwd() {
#print -l $PWD ${(u)dirstack} >> $DIRSTACKFILE
#}
###################################
###### Options de complétion ######
###################################
# Schémas de complétion
# - Schéma A :
# 1ère tabulation : complète jusqu'au bout de la partie commune
# 2ème tabulation : propose une liste de choix
# 3ème tabulation : complète avec le 1er item de la liste
# 4ème tabulation : complète avec le 2ème item de la liste, etc...
# -> c'est le schéma de complétion par défaut de zsh.
# Schéma B :
# 1ère tabulation : propose une liste de choix et complète avec le 1er item
# de la liste
# 2ème tabulation : complète avec le 2ème item de la liste, etc...
# Si vous voulez ce schéma, décommentez la ligne suivante :
#setopt menu_complete
# Schéma C :
# 1ère tabulation : complète jusqu'au bout de la partie commune et
# propose une liste de choix
# 2ème tabulation : complète avec le 1er item de la liste
# 3ème tabulation : complète avec le 2ème item de la liste, etc...
# Ce schéma est le meilleur à mon goût !
# Si vous voulez ce schéma, décommentez la ligne suivante :
unsetopt list_ambiguous
# Quand le dernier caractère d'une complétion est '/' et que l'on
# tape 'espace' après, le '/' est effacé
setopt auto_remove_slash
# Ne fait pas de complétion sur les fichiers et répertoires cachés
unsetopt glob_dots
# Traite les liens symboliques comme il faut
setopt chase_links
# Quand l'utilisateur commence sa commande par '!' pour faire de la
# complétion historique, il n'exécute pas la commande immédiatement
# mais il écrit la commande dans le prompt
setopt hist_verify
# Si la commande est invalide mais correspond au nom d'un sous-répertoire
# exécuter 'cd sous-répertoire'
setopt auto_cd
###############################################
# 5. Paramètres de l'historique des commandes #
###############################################
# Définition des variables
SAVEHIST = 5000
HISTSIZE = 5000
HISTFILE = $HOME /.zsh/history
#export TIMEFMT="%E"
export SAVEHIST HISTSIZE HISTFILE
# Toutes les sessions zsh partage le même historique
#setopt SHARE_HISTORY
# Ajoute l'historique à la fin de l'ancien fichier
#setopt append_history
# Chaque ligne est ajoutée dans l'historique à mesure qu'elle est tapée
setopt inc_append_history
# Ne stocke pas une ligne dans l'historique si elle est identique à la
# précédente
setopt hist_ignore_dups
# Supprime les répétitions dans le fichier d'historique, ne conservant
# que la dernière occurrence ajoutée
#setopt hist_ignore_all_dups
# Supprime les répétitions dans l'historique lorsqu'il est plein, mais
# pas avant
setopt hist_expire_dups_first
# N'enregistre pas plus d'une fois une même ligne, quelles que soient
# les options fixées pour la session courante
#setopt hist_save_no_dups
# La recherche dans l'historique avec l'éditeur de commandes de zsh ne
# montre pas une même ligne plus d'une fois, même si elle a été
# enregistrée plusieurs fois
setopt hist_find_no_dups
# Affichage de la date du début de la commande et sa durée (depuis epoch)
# Culture time: epoch: 1er janvier 1970
setopt extended_history
# Ne pas enregistrer les commandes précédées d'un espace:
setopt hist_ignore_space
###########################################
# 6. Complétion des options des commandes #
###########################################
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'
zstyle ':completion:*' max-errors 3 numeric
zstyle ':completion:*' use-compctl false
## Pour la liste des processus que l'on peut kill, avec un menu et couleur
zstyle ':completion:*:*:*:*:processes' menu yes select
#zstyle ':completion:*:*:*:*:processes' force-list always
zstyle ':completion:*:processes' command 'ps -au$USER'
zstyle ':completion:*:*:kill:*:processes' list-colors "=(#b) #([0-9]#)*=36=31"
## Pour éviter de reproposer un argument déjà utiliser dans la commande lors de la complétion
zstyle ':completion:*:(rm|mv|cp|ls|scp):*' ignore-line yes
## cd ne sélectionnera pas le dossier courant lorsqu'il devra remonter d'un dossier
# cd ../<TAB> ne proposera pas le dossier courant par exemple.
zstyle ':completion:*:cd:*' ignore-parents parent pwd
## Pour la liste des fichiers qu'on peut ouvrir avec vim
zstyle ':completion:*:*:vim:*' menu yes select
## Mettre en cache les résultats de l'auto-complétion car certaines fonctions sont lentes (apt, dpkg, ...)
# Ne pas hésiter à faire un petit aptitude install <TAB> et de lister tous les résultats possibles une première fois, histoire d'avoir tous les paquets en cache (~600ko), ça vaut le coup!
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
## Ajout des couleurs pour la complétion
zmodload -i zsh/complist
zstyle ':completion:*' list-colors ${ (s. : .)LS_COLORS }
## Complétion de la commande cd avec les répertoires locaux puis ceux de la variable CDPATH
zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories
## Complétion des commandes ssh avec le contenu du fichier ~/.ssh/config et le contenu de host
local HOSTS
#[[ -f ~/.ssh/config ]] && HOSTS=(`sed -n \'s/^Host \(.*\)/\1/p\' ~/.ssh/config`)
#if [ -f ~/.ssh/config ]; then
#HOSTS=(`grep ^Host ~/.ssh/config | sed s/Host\ // | egrep -v ‘ ^\*$’ `)
#fi
#zstyle ':completion:*:(ssh|scp|sftp|sshfs):*' hosts ${HOSTS}
# Complétions pour certains programmes en fonction des extensions
zstyle ':completion:*:*:vlc:*' file-patterns '*.(mkv|MKV|avi|AVI|flv|FLV|mp4|MP4|webm|WEBM|mov|MOV|flac|FLAC|mp3|MP3|ogg|OGG|ogv|OGV|wmv|WMV)\ *(-/):directories'
## Ajout de la complétion pour plusieurs fonctions:
autoload -U compinit
autoload -U zutil
autoload -U complist
# Activation
compinit
###########################################
# 7. Création des fichiers et répertoires #
###########################################
# Dossier .zsh dans le répertoire personnel
if [ ! -d ~/.zsh ] ; then
mkdir ~/.zsh
fi
# Fichier contenant l'historique pour chaque utilisateur
if [ ! -f ~/.zsh/history ] ; then
touch ~/.zsh/history
fi
# Dossier contenant le cache pour chaque utilisateur
if [ ! -d ~/.zsh/cache ] ; then
mkdir ~/.zsh/cache
fi
###########################################
############## 8. Globbing ################
###########################################
# Activation du globbing étendu
setopt extendedglob
## '^' inverse la pattern qui suit.
# Exemple:
# `ls ^*.log` listera tous les fichiers exceptés *.log