Limpiando la salida de xev

Limpiando la salida de xev

SO: sesión Openbox de Lubuntu 14.04

Digamos que ejecuto xevy presiono la Supertecla, obtengo una gran cantidad de resultados (>100 líneas) y la información relevante está muy por debajo de la salida, como se ve cuando ejecuto

  • correrxev | grep -in super
  • prensasuper
  • y luego cierre la xevventana emergente.
$ xev | grep -in super  
122:    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
129:    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
$ 

Me encontré con una frase en la wiki de Arch (wiki.archlinux.org/index.php/Extra_Keyboard_Keys#In_Xorg) que limpia drásticamente la salida (con ciertas excepciones indicadas en el enlace):

xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'

La salida se reduce a solo:

133 Super_L

Quiero saber cómo el código wiki de Arch hace su magia. Todo lo que puedo adivinar es que de alguna manera está analizando la salida comenzando con KeyPresspero después de eso no entiendo nada:

KeyPress event, serial 48, synthetic NO, window 0x2800001,
root 0x7e, subw 0x0, time 13500391, (362,697), root:(363,760),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 

¿Puede alguien explicarnos lo que hace el código?

Respuesta1

awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
  • -F'[ )]+'indica awkdividir la línea en cualquier número de espacios o corchetes. Entonces, los campos state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,serían:

              # empty field
    state
    0x0,
    keycode
    133
    (keysym 
    0xffeb,
    Super_L
    ,
    same_screen
    YES,
    
  • /^KeyPress/ { a[NR+2] }crea una entrada vacía en la línea número + 2 de la matriz a, para las líneas que comienzan con KeyPress.
  • NR in acomprueba si el número de línea actual tiene una entrada en la matriz a. Esto sería cierto si una línea que comenzara con KeyPressviniera hace dos líneas.
  • Luego imprime los campos quinto y octavo, que son 133y Super_Lcomo se puede ver en el primer punto.

xevla salida en realidad se parece a:

$ xev
...
KeyPress event, serial 36, synthetic NO, window 0x2a00001,
    root 0x29c, subw 0x0, time 217441518, (91,162), root:(91,697),
    state 0x10, keycode 134 (keysym 0xffec, Super_R), same_screen YES,

Entonces, para cada pulsación de tecla, la segunda línea posterior tiene el código clave y el nombre.

información relacionada