これにより、showkey -s
16進形式のキースキャンコードを取得できます。 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
)。そうでない場合は、そのまま印刷を開始してください。line
0x
${(z)param}
printf
line
0x
以下も使用できます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進値を現在のキーマップに従って標準出力に出力します。