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

세 번째 열은 8진수 코드입니다.

showkey매뉴얼 페이지에서 발췌

"ascii" 덤프 모드에 있을 때 showkey는 누른 키의 10진수, 8진수, 16진수 값을 현재 키맵에 따라 표준 출력으로 인쇄합니다.

관련 정보