LINUX.ORG.RU

Как сосчитать нажатие функциональной клавиши?

 , ,


0

1

Костылю через printf, но как-то через жопу выходит. ЧЯДНТ?

while read -s -n1; do
    case $REPLY in
        $(printf "\\e[11~"))
            echo '<<<<F1>>>>';;
        $(printf "\n"))
            echo '<<<<enter>>>>';;
        q)  
            break;;
        *)  
            echo "<<<<$REPLY>>>>";;
    esac
done```
                                                                                                                                                                                


Последнее исправление: basarga (всего исправлений: 1)

В разных терминалах могут быть разные коды!

#!/bin/bash

readkey() {
  local key settings
  settings=$(stty -g)             # save terminal settings
  stty -icanon -echo min 0        # disable buffering/echo, allow read to poll
  dd count=1 > /dev/null 2>&1     # Throw away anything currently in the buffer
  stty min 1                      # Don't allow read to poll anymore
  key=$(dd count=1 2> /dev/null)  # do a single read(2) call
  stty "$settings"                # restore terminal settings
  printf "%s" "$key"
}

# Get the F1 key sequence from termcap, fall back on Linux console
# TERM has to be set correctly for this to work.
#f1=$(tput kf1)
#f1=$'\033[[A'
f1=$'\033[11~'
f2=$'\033[12~'
f11=$'\033[23~'
f12=$'\033[24~'

echo "Hit F1 to quit"
while true
do
  key=$(readkey)
  if [[ $key == "$f1" ]]
  then
    echo "F1 pressed!"
    break
  else
    echo -n "${key}" | xxd -g1
  fi
done

DiMoN ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.