#!/bin/bash
# arrow-detect.sh : Détecte les flèches du clavier et quelques autres touches.
# Merci, Sandro Magi, pour m'avoir montré comment faire.

# --------------------------------------------
# Codes générés par l'appui sur les touches.
flechehaut='\[A'
flechebas='\[B'
flechedroite='\[C'
flechegauche='\[D'
insert='\[2'
delete='\[3'
# --------------------------------------------

SUCCES=0
AUTRE=65

echo -n "Appuyer sur une touche...  "
#  Il est possible qu'il faille appuyer aussi sur ENTER si une touche non gérée 
#+ ici est utilisée.
read -n3 touche                      # Lit 3 caractères.

echo -n "$touche" | grep "$flechehaut"  # Vérifie si un code est détecté.
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche flèche haut."
  exit $SUCCES
fi

echo -n "$touche" | grep "$flechebas"
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche flèche bas."
  exit $SUCCES
fi

echo -n "$touche" | grep "$flechedroite"
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche flèche droite."
  exit $SUCCES
fi

echo -n "$touche" | grep "$flechegauche"
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche flèche gauche."
  exit $SUCCES
fi

echo -n "$touche" | grep "$insert"
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche \"Insert\"."
  exit $SUCCES
fi

echo -n "$touche" | grep "$delete"
if [ "$?" -eq $SUCCES ]
then
  echo "Appui sur la touche \"Delete\"."
  exit $SUCCES
fi


echo "Autre touche."

exit $AUTRE

# ========================================= #

#  Mark Alexander vient avec une version
#+ simplifiée du script ci-dessus (Merci !).
#  Cela supprime le besoin du grep.

#!/bin/bash

  flechehaut=$'\x1b[A'
  flechebas=$'\x1b[B'
  flechegauche=$'\x1b[D'
  flechedroite=$'\x1b[C'

  read -s -n3 -p "Appuyez sur une flèche : " x

  case "$x" in
  $flechehaut)
     echo "Vous avez appuyé sur la flèche haute"
     ;;
  $flechebas)
     echo "Vous avez appuyé sur la flèche basse"
     ;;
  $flechegauche)
     echo "Vous avez appuyé sur la flèche gauche"
     ;;
  $flechedroite)
     echo "Vous avez appuyé sur la flèche droite"
     ;;
  esac

exit $?

# ========================================= #

# Antonio Macchi propose une alternative plus simple.

#!/bin/bash

while true
do
  read -sn1 a
  test "$a" == `echo -en "\e"` || continue
  read -sn1 a
  test "$a" == "[" || continue
  read -sn1 a
  case "$a" in
    A)  echo "haut";;
    B)  echo "bas";;
    C)  echo "droite";;
    D)  echo "gauche";;
  esac
done

# ========================================= #

#  Exercice :
#  ---------
#  1) Ajouter la détection des touches "Home", "End", "PgUp" et "PgDn".
