Obtenha códigos de verificação no formato octal

1

Usando showkey -s , posso obter o código de uma chave como um número hexadecimal. Como posso obtê-lo diretamente como um número octal?

    
por student 26.10.2013 / 21:42

2 respostas

1

showkey não tem nenhum interruptor para isso, mas você sempre pode canalizar a saída para outro programa para fazer a conversão.

Com zsh você pode fazer assim:

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 é parte do GNU coreutils e pode ser usado para modificar operações de buffering nos fluxos padrão. Chamado com -oL ele ajusta stdout para ser armazenado em buffer de linha. Isso tem que ser feito para que a saída de showkey -s seja passada imediatamente através do cano linha por linha. Caso contrário, a saída só será passada quando o buffer estiver cheio (geralmente vários kB) ou o programa sair.

A saída é canalizada para um while -loop, que lê cada linha na variável line até que o tubo seja fechado. Se line começar com 0x (corresponde a regex '^ 0x') cada número hexadecimal ( ${(z)param} divide uma linha em palavras como o zsh dividiria uma linha de comando) é convertido para octal (na verdade, o número hexadecimal é implicitamente convertido para decimal pelo shell e que formatado como octal por printf ). Se line não começar com 0x , imprima como está.

Você também pode usar perl :

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

O mesmo princípio se aplica.

    
por 02.04.2014 / 12:58
-1

Quando você executa isso em "modo ascii", imprime a representação octal da tecla.

Exemplo

$ 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

A terceira coluna é o código octal.

trecho da página showkey man

When in 'ascii' dump mode, showkey prints to the standard output the decimal, octal, and hexadecimal value(s) of the key pressed, according to he present keymap.

    
por 26.10.2013 / 23:12