8進形式でスキャンコードを取得する

8進形式でスキャンコードを取得する

これにより、showkey -s16進形式のキースキャンコードを取得できます。 8進数を直接取得する方法は?

答え1

showkeyこれらのスイッチはありませんが、変換のためにいつでも出力を他のプログラムにパイプすることができます。

次のことができますzsh

stdbuf -oL showkey -s | while read line
do
  if [[ "$line" =~ '^0x' ]]
  then
    for code in ${(z)line}
    do
      printf "0%o " $code
    done
    echo
  else
    echo $line
  fi
done

stdbufの一部ですGNUコアツール標準ストリームのバッファリング操作を変更するために使用できます。-oL調整を呼び出すために使用します。標準出力ラインバッファリングを実行します。これは次showkey -sの出力に必要です。それ以外の場合は、バッファがいっぱいになるか(通常数kB)、プログラムが終了したときにのみ出力が渡されます。

出力はループにパイプされ、パイプが閉じるまでwhile各行を変数として読み込みます。各16進数(zshがコマンドラインを分割するかのように行を単語に分割する)は、8進数に変換されます(実際には16進数line)。そうでない場合は、そのまま印刷を開始してください。line0x${(z)param}printfline0x


以下も使用できますperl

stdbuf -oL showkey -s | perl -e '
  while(<STDIN>){
    if(/^0x/){ 
      printf "0%o ", hex($_) for split; 
      print $/;
    } else { 
      print 
    }
  }'

同じ原則が適用されます。

答え2

「asciiモード」で実行すると、キーの8進数表現が印刷されます。

はい

$ sudo showkey -a

Press any keys - Ctrl-D will terminate this program

a    97 0141 0x61
b    98 0142 0x62
c    99 0143 0x63
d   100 0144 0x64
e   101 0145 0x65
f   102 0146 0x66
g   103 0147 0x67
1    49 0061 0x31
2    50 0062 0x32
3    51 0063 0x33
^D    4 0004 0x04

3番目の列は8進コードです。

showkeyマニュアルページから抜粋

「ascii」ダンプモードの場合、showkeyは押されたキーの10進数、8進数、16進値を現在のキーマップに従って標準出力に出力します。

関連情報