From b4277a1fe168c5352f4241a09045c7c15c29b326 Mon Sep 17 00:00:00 2001 From: Gardouille Date: Sun, 17 Aug 2014 22:54:05 +0200 Subject: [PATCH] first commit --- clean_zsh.sh | 29 ++ zlogin | 76 ++++ zlogout | 10 + zprofile | 10 + zshenv | 59 +++ zshrc | 1021 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1205 insertions(+) create mode 100755 clean_zsh.sh create mode 100644 zlogin create mode 100644 zlogout create mode 100644 zprofile create mode 100644 zshenv create mode 100644 zshrc diff --git a/clean_zsh.sh b/clean_zsh.sh new file mode 100755 index 0000000..6d83051 --- /dev/null +++ b/clean_zsh.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# Liste des fichiers à supprimer +## Tous les fichiers de configuration ZSH du système +## Le fichier de configuration et le dossier personnel de ZSH pour l'utilisateur root +## Le fichier de configuration et le dossier personnel de ZSH du dossier courant +## L'archive contenant l'ensemble de la configuration de ZSH +file_list="/etc/zsh/zshrc /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zlogout /etc/zsh/zlogin /root/.zshrc /root/.zsh/ .zshrc .zsh/ zsh_last.tar.gz" + +# Recupere un caractere unique +getc () +{ + stty raw -echo + tmp=`dd bs=1 count=1 2>/dev/null` + eval $1='$tmp' + stty cooked +} + +echo "$file_list will be deleted" +echo "Confirm it (y/n):" +getc confirm_delete +if [ `echo "$confirm_delete" | grep "y"` ];then + echo "Tadadadaaammm" + #rm -rf $file_list +else + echo "Good choice" +fi + + diff --git a/zlogin b/zlogin new file mode 100644 index 0000000..45cfe1c --- /dev/null +++ b/zlogin @@ -0,0 +1,76 @@ +# /etc/zsh/zlogin ou ~/.zlogin +# Fichier de configuration de zsh, lu au lancement des shells de login +# Formation Debian GNU/Linux par Alexis de Lattre +# http://formation-debian.via.ecp.fr/ + +# Ce fichier contient les commandes qui s'exécutent quand l'utilisateur +# ouvre une console + +# Afficher des informations sur le systèmes: +#echo "\n#### Info uname ####" +#uname -a + +# Affiche l'uptime de la machine +#echo "\n#### uptime ####" +#uptime + +# Affiche un dessin (cf fonction définie dans zshrc) +bonjour + +# Afficher la liste todo (paquet devtodo) +echo "\n\nListe de tâches:" +#todo -G --global-database /home/$USER/.todo +todo -G --global-database ~/.todo + +# Accepte les messages d'autres utilisateurs +mesg y + +# Pour les ordinateurs avec un pavé numérique... +# Active le pavé numérique quand on se loggue en console +#case "`tty`" in /dev/tty[1-6]*) +# setleds +num +#esac + + +# Lancement de ssh-agent +if [ ${USER} != "root" ]; then + if [ ! -f ~/.keychain/$HOST-sh ]; then + keychain --clear ~/.ssh/id_rsa + fi + source ~/.keychain/$HOST-sh +fi +#keychain ~/.ssh/id_rsa +#source ~/.keychain/$HOST-sh + + +## Génération du fichier ~/.ssh/config +if [ -f ~/.ssh/config_00base ]; then + rm -f ~/.ssh/config + cat ~/.ssh/config_* > ~/.ssh/config + chmod 0600 ~/.ssh/config* +fi + +# Recupere un caractere unique +getc () +{ + stty raw -echo + tmp=`dd bs=1 count=1 2>/dev/null` + eval $1='$tmp' + stty cooked +} + + +# Si on est dans une console vc, et qu'aucune +# instance de X n'est détecté, demander si +# startx doit être lancé +if [ ${USER} != "root" ]; then + if [ -n `tty | grep '/dev/tty'` ] && [ -z "`ps aux|grep "start[x]"`" ];then + echo "Aucune session X11 détecté, voulez vous en lancer une ? [O|n]" + getc start_x + if [ `echo "$start_x" | grep "n"` ];then + echo "X11 ne sera pas lancé." + else + `startx -- :1 vt1` + fi + fi +fi diff --git a/zlogout b/zlogout new file mode 100644 index 0000000..5b352ec --- /dev/null +++ b/zlogout @@ -0,0 +1,10 @@ +# /etc/zsh/zlogout ou ~/.zlogout +# Fichier de configuration de zsh, lu à la fermeture des shells de login +# Formation Debian GNU/Linux par Alexis de Lattre +# http://formation-debian.via.ecp.fr/ + +# Ce fichier contient les commandes qui s'exécutent quand l'utilisateur +# ferme une console + +# Nettoie l'écran +clear diff --git a/zprofile b/zprofile new file mode 100644 index 0000000..4c299cb --- /dev/null +++ b/zprofile @@ -0,0 +1,10 @@ +# /etc/zsh/zprofile: system-wide .zprofile file for zsh(1). +# +# This file is sourced only for login shells (i.e. shells +# invoked with "-" as the first character of argv[0], and +# shells invoked with the -l flag.) +# +# Global Order: zshenv, zprofile, zshrc, zlogin + +xset b off + diff --git a/zshenv b/zshenv new file mode 100644 index 0000000..df27d8c --- /dev/null +++ b/zshenv @@ -0,0 +1,59 @@ +# /etc/zsh/zshenv ou ~/.zshenv +# Fichier de configuration de zsh, lu au lancement de tout shell Zsh +# Formation Debian GNU/Linux par Alexis de Lattre +# http://formation-debian.via.ecp.fr/ + +# Le PATH = répertoires dans lequels le shell va chercher les commandes +# ATTENTION : le répertoire courant ne fait pas partie du PATH +export PATH="/usr/local/bin:/usr/local/sbin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/sbin:$HOME/bin:/opt:/usr/local/games" + +# CDPATH: variable d'environnement que cd regardera pour la complétion sur les répertoires qu'elle pourra parcourir +export CDPATH='/etc/:/var/:./:~/:../:../../' + +# Viewer/Editeur par defaut (pour Crontab, CVS,...) +export VISUAL=vim +export EDITOR=vim +export BROWSER=firefox + +# Pager less: +export PAGER=less + +# Variables pour la coloration de less +export LESS_TERMCAP_mb=$'\E[01;31m' # début de blink +export LESS_TERMCAP_md=$'\E[01;31m' # début de gras +export LESS_TERMCAP_me=$'\E[0m' # fin +export LESS_TERMCAP_so=$'\E[01;44;33m' # début de la ligne d`état +export LESS_TERMCAP_se=$'\E[0m' # fin +export LESS_TERMCAP_us=$'\E[01;32m' # début de souligné +export LESS_TERMCAP_ue=$'\E[0m' # fin + +# Limitation de la taille de la pile de dossier: +DIRSTACKSIZE=10 +export DIRSTACKSIZE + +# Permissions rw-r--r-- pour les fichiers crées +# et rwxr-xr-x pour les répertoires crées +umask 022 + +# Proxy HTTP / FTP sans mot de passe +#export http_proxy="http://localhost:8118" +#export ftp_proxy="ftp://proxy.exemple.org:8080" + +# Proxy HTTP / FTP avec mot de passe +#export http_proxy="http://login:password@proxy.exemple.org:8080" +#export ftp_proxy="ftp://login:password@proxy.exemple.org:8080" + +# Ne pas passer par le proxy pour les domaines locaux +#export no_proxy="exemple.org" + +# De la couleur pour grep +export GREP_OPTIONS='--color=auto' + +# Verrouiller le shell après 10 minutes +# Inutiliser pour le moment, ça verrouille toutes les fenêtres d'un multi-plexeur (screen, tmux, …) +#export TMOUT=600 +# Si une session root (ou sudo -s, ...) est exécutée depuis 30min, on la termine +if [ ${USER} = "root" ]; then + export TMOUT=1800 +fi + diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..817a1d0 --- /dev/null +++ b/zshrc @@ -0,0 +1,1021 @@ +# /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' +alias cp='cp -R' + +# 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. " +if [ ${USER} != "root" ]; then + alias sudo='sudo ' + alias s='sudo ' + alias si='sudo iptables -L -vn ' + alias sp='sudo puppet agent -t ' + alias sv='sudo vi ' + alias sz='sudo zsh ' +else + alias sudo='sudo ' + alias s='sudo ' + 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 update='aptitude update' + alias show='aptitude show' + alias se='aptitude search' + alias ins='aptitude install' + alias insexperimental='aptitude -t experimental install' + alias up='aptitude update && aptitude full-upgrade && aptitude clean' + alias version='apt-show-versions' + alias pol='apt-cache policy ' +else + alias update='yum update' + 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' +alias dus='du * -sh' + +# 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' + + +# Décompression +alias untargz='tar -zxvf' +alias untarbz2='tar -jxvf' + +# Screen +#alias totod='screen -c ~/.screen/scr.toto' +#alias toto='screen -x toto' +#alias toto='screen -Rd toto -c ~/.screen/scr.toto' +#alias toto='tmux attach -f ~/.tmux.conf -d -t 0' +alias toto='tmux a -t 0 ' +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' +alias -g G='| grep' +alias -g L='| less' +alias -g M="| most" +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 + +## 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 +alias path='echo $PATH | tr ":" "\n" ' + +# 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' +alias diffs='diff --side-by-side' + +# 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" + +## 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 + /home/${USER}/bin/bash_quote | ponythink + 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 + wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d" " -f 6 | cut -d\< -f 1 +} +#lynx --dump http://www.whatismyip.com/|grep Your|awk '{print $4}' + + +#Récupère l'adresse IP (privee) +function ippriv() +{ + echo "eth0: `ifconfig eth0|grep "inet adr"|awk '{print $2}'|awk -F ':' '{print $2}'`" + echo "wlan0: `ifconfig wlan0|grep "inet adr"|awk '{print $2}'|awk -F ':' '{print $2}'`" +} + + +#Renomme les fichiers en minuscule +function lowercase() +{ + for file ; do + filename=${file##*/} + case "$filename" in + */*) dirname==${file%/*} ;; + *) dirname=.;; + esac + nf=$(echo $filename | tr A-Z a-z) + newname="${dirname}/${nf}" + if [ "$nf" != "$filename" ]; then + mv "$file" "$newname" + echo "lowercase: $file --> $newname" + else + echo "lowercase: $file not changed." + 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 +w pour aller au début du mot suivant +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 pour aller jusqu'au caractère vers l'avant +3f pour aller jusqu'à la 3ème occurence du caractère vers l'avant +F pour aller jusqu'au caractère vers l'arrière +nF pour aller jusqu'à la nème occurence du caractère vers l'arrière +t pour aller jusqu'au caractère vers l'avant en s'arrêtant avant +T pour aller jusqu'au caractère 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 +: pour aller à la ligne +% pour aller à la parenthèse (acollade, crochet) correspondant + +# Copier/coller avancé +\"ayy Copier la ligne courante dans le buffer \"a\" +\"5byy Copier les 5 lignes sous le curseur dans le buffer \"b\" +\"ey Copier les lignes sélectionnées dans le buffer \"e\" + +# undo & redo +u pour annuler pour annuler la dernière modification +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 + d$ + CTRL-o D +# Supprimer le texte du curseur au début de la ligne + 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 + CTRL-o suivi de la commande à exécuter + +# Code touche +# Pour afficher le code clavier d'une touche spéciale en mode insertion: + CTRL-V +# Pour afficher le code interne d'une touche spéciale: + 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%#%{%} " +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 + + + + +# 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 ../ 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 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 + + +