# /etc/zsh/zshrc ou ~/.zshrc
# Fichier de configuration principal de zsh
# Formation Debian GNU/Linux par Alexis de Lattre
# http://www.via.ecp.fr/~alexis/formation-linux/

#
# 1. Les alias
#

#  Gestion du ls : couleur + touche pas aux accents
alias ls='ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable'

# 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 -a'
alias lla='ls -la'

# Quelques alias pratiques
alias c='clear'
alias less='less --quiet'
alias s='cd ..'
alias df='df --human-readable'
alias du='du --human-readable'

#
# 2. Prompt et Dfinition des touches
#

# exemple : ma touche HOME, cf man termcap, est codifiee K1 (upper left
# key on keyboard) dans le /etc/termcap. En me referant a l'entree
# correspondant a mon terminal (par exemple 'linux') dans ce fichier, je
# lis : K1=\E[1~, c'est la sequence de caracteres qui sera envoyee au
# shell. La commande bindkey dit simplement au shell : a chaque fois que
# tu rencontres telle sequence de caractere, tu dois faire telle action.
# La liste des actions est disponible dans "man zshzle".

# Un charset franais
export LESSCHARSET="latin1"

# Correspondance touches-fonction
bindkey '^A'    beginning-of-line       # Home
bindkey '^E'    end-of-line             # End
bindkey '^D'    delete-char             # Del
bindkey '[3~' delete-char             # Del
bindkey '[2~' overwrite-mode          # Insert
bindkey '[5~' history-search-backward # PgUp
bindkey '[6~' history-search-forward  # PgDn

# Prompt couleur (la couleur n'est pas la mme pour le root et
# pour les simples utilisateurs)
if [ "`id -u`" -eq 0 ]; then
  export PS1="%{[33;36;1m%}%T%{[0m%} %{[33;34;1m%}%n%{[0m[33;33;1m%}@%{[33;37;1m%}%m %{[33;32;1m%}%~%{[0m[33;33;1m%}%#%{[0m%} "
else
  export PS1="%{[33;36;1m%}%T%{[0m%} %{[33;31;1m%}%n%{[0m[33;33;1m%}@%{[33;37;1m%}%m %{[33;32;1m%}%~%{[0m[33;33;1m%}%#%{[0m%} "
fi

# Console linux, dans un screen ou un rxvt
if [ "$TERM" = "linux" -o "$TERM" = "screen" -o "$TERM" = "rxvt" ]
then
  # Correspondance touches-fonction spcifique
  bindkey '[1~' beginning-of-line       # Home
  bindkey '[4~' end-of-line             # End
fi

# xterm
if [ "$TERM" = "xterm" ]
then
  # Correspondance touches-fonction spcifique
  bindkey '[H'  beginning-of-line       # Home
  bindkey '[F'  end-of-line             # End
fi

# 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`"
  fi
fi

#
# 3. Options de zsh (cf 'man zshoptions')
#

# Je ne veux JAMAIS de beeps
unsetopt beep
unsetopt hist_beep
unsetopt list_beep
# >| doit tre utiliss pour pouvoir craser un fichier dj existant ;
# le fichier ne sera pas cras avec '>'
unsetopt clobber
# Ctrl+D est quivalent  'logout'
unsetopt ignore_eof
# Affiche le code de sortie si diffrent de '0'
setopt print_exit_value
# Demande confirmation pour 'rm *'
unsetopt rm_star_silent
# Correction orthographique des commandes
# Dsactiv car, contrairement  ce que dit le "man", il essaye de
# corriger les commandes avant de les hasher
#setopt correct

# Schmas de compltion

# - Schma A :
# 1re tabulation : complte jusqu'au bout de la partie commune
# 2me tabulation : propose une liste de choix
# 3me tabulation : complte avec le 1er item de la liste
# 4me tabulation : complte avec le 2me item de la liste, etc...
# -> c'est le schma de compltion par dfaut de zsh.

# Schma B :
# 1re tabulation : propose une liste de choix et complte avec le 1er item
#                   de la liste
# 2me tabulation : complte avec le 2me item de la liste, etc...
# Si vous voulez ce schma, dcommentez la ligne suivante :
#setopt menu_complete

# Schma C :
# 1re tabulation : complte jusqu'au bout de la partie commune et
#                   propose une liste de choix
# 2me tabulation : complte avec le 1er item de la liste
# 3me tabulation : complte avec le 2me item de la liste, etc...
# Ce schma est le meilleur  mon got !
# Si vous voulez ce schma, dcommentez la ligne suivante :
#unsetopt list_ambiguous
# (Merci  Youri van Rietschoten de m'avoir donn l'info !)

# Options de compltion
# Quand le dernier caractre d'une compltion est '/' et que l'on
# tape 'espace' aprs, le '/' est effa
setopt auto_remove_slash
# Fait la compltion sur les fichiers et rpertoires cachs
setopt glob_dots

# Traite les liens symboliques comme il faut
setopt chase_links

# Quand l'utilisateur commence sa commande par '!' pour faire de la
# compltion historique, il n'excute pas la commande immdiatement
# mais il crit la commande dans le prompt
setopt hist_verify
# Si la commande est invalide mais correspond au nom d'un sous-rpertoire
# excuter 'cd sous-rpertoire'
setopt auto_cd
# L'excution de "cd" met le rpertoire 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 aprs un "pushd" ou "popd"
setopt pushd_silent
# "pushd" sans argument = "pushd $HOME"
setopt pushd_to_home

# Les jobs qui tournent en tche de fond sont nic  '0'
unsetopt bg_nice
# N'envoie pas de "HUP" aux jobs qui tourent quand le shell se ferme
unsetopt hup

#
# 4. Paramtres de l'historique des commandes
#

# Nombre d'entres dans l'historique
export HISTORY=100
export SAVEHIST=100
# Fichier o est stock l'historique
export HISTFILE=$HOME/.history

#
# 5. Compltion des options des commandes
#

zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'
zstyle ':completion:*' max-errors 3 numeric
zstyle ':completion:*' use-compctl false

autoload -U compinit
compinit
