#!/bin/bash
# Auteur : Sigurd Solaas, 20 avril 2011
# Utilisé avec l'accord de l'auteur.
# Nécessite Bash version 4.2 ou supérieure.
# Traduction : Jean-Philippe Guérard

touche="pas encore de valeur"
while true; do
  clear
  echo "Démonstration des touches complémentaires avec Bash"
  echo "Appuyez sur une touche pour essayer :"
  echo
  echo "* Insérer, Supprimer, Début, Fin."
  echo "* Page suivante, Page précédente."
  echo "* Les 4 flèches."
  echo "* Tabulation, Entrée, Échappement, Espace."
  echo "* Des lettres, des chiffres, et cætera."
  echo
  echo "    d = afficher la date et l'heure"
  echo "    q = quitter"
  echo "================================"
  echo

 # Convertit les différentes touches Début vers
 # le Début de la touche 7 du pavé numérique.
 if [ "$touche" = $'\x1b\x4f\x48' ]; then
  touche=$'\x1b\x5b\x31\x7e'
  #   Expansion d'une chaîne de caractères.
 fi

 # Convertit les différentes touches Fin vers
 # le Fin de la touche 1 du pavé numérique.
 if [ "$touche" = $'\x1b\x4f\x46' ]; then
  touche=$'\x1b\x5b\x34\x7e'
 fi

 case "$touche" in
  $'\x1b\x5b\x32\x7e')  # Insérer
   echo Touche Insérer
  ;;
  $'\x1b\x5b\x33\x7e')  # Supprimer
   echo Touche Supprimer
  ;;
  $'\x1b\x5b\x31\x7e')  # Début (7 du pavé numérique)
   echo Touche Début
  ;;
  $'\x1b\x5b\x34\x7e')  # Fin (1 du pavé numérique)
   echo Touche Fin
  ;;
  $'\x1b\x5b\x35\x7e')  # Page précédente
   echo Touche Page précédente
  ;;
  $'\x1b\x5b\x36\x7e')  # Page suivante
   echo Touche Page suivante
  ;;
  $'\x1b\x5b\x41')  # Flèche vers le haut
   echo Touche Flèche vers le haut
  ;;
  $'\x1b\x5b\x42')  # Flèche vers le bas
   echo Touche Flèche vers le bas
  ;;
  $'\x1b\x5b\x43')  # Flèche vers la droite
   echo Touche Flèche vers la droite
  ;;
  $'\x1b\x5b\x44')  # Flèche vers la gauche
   echo Touche Flèche vers la gauche
  ;;
  $'\x09')  # Tabulation
   echo Touche Tabulation
  ;;
  $'\x0a')  # Entrée
   echo Touche Entrée
  ;;
  $'\x1b')  # Échappement
   echo Touche Échappement
  ;;
  $'\x20')  # Espace
   echo Touche Espace
  ;;
  d)
   date
  ;;
  q)
  echo Il est temps d\'arrêter...
  echo
  exit 0
  ;;
  *)
   echo Vous avez appuyé sur : \'"$touche"\'
  ;;
 esac

 echo
 echo "================================"

 unset T1 T2 T3
 read -s -N1 -p "Appuyez sur une touche : "
 T1="$REPLY"
 read -s -N2 -t 0.001
 T2="$REPLY"
 read -s -N1 -t 0.001
 T3="$REPLY"
 touche="$T1$T2$T3"

done

exit $?
