¿Cómo puedo saber cuáles son los códigos de escape que envía mi terminal para ciertos códigos especiales que cat no muestra?

¿Cómo puedo saber cuáles son los códigos de escape que envía mi terminal para ciertos códigos especiales que cat no muestra?

Quería saber qué envía mi terminal para Ctrl+Retroceso y Alt+Retroceso, la forma estándar de hacer esto es ejecutar caten el terminal y escribir cosas generalmente funciona, pero con ciertos resultados como estos, los resultados son complicados.

Supongo que Alt+Retroceso está enviando \x1b\x7f(es decir, escape de retroceso) pero lo que sucede si ejecuto caty escribo Ctrl+V y Alt+Retroceso, o simplemente Alt+Retroceso, lo que sucede es que el escape se "escribirá" y luego, inmediatamente se elimina con la tecla de retroceso para que parezca que no pasa nada. Solo me di cuenta de esto una vez al ver a mi computadora renderizar un solo cuadro del ^[escape allí.

Hasta ahora no estoy seguro de cómo saber qué envía Ctrl+Retroceso. no es Ctrl+W a pesar de que ambos eliminan una palabra en el indicador de bash, porque debajo catno se hace nada mientras Ctrl+W elimina una palabra.

Respuesta1

Simplemente use este comando:

showkey -a

Respuesta2

Con zsh:

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

O con bash:

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

Verá la entrada del terminal sin formato a medida que la envía y como la representa cat -vte. No ingrese nada durante 4 segundos (40 decisegundos) para detenerse.

Puede reemplazar cat -vtecon od -An -w1 -tu1 -tx1 -to1 -ta(asumiendo GNU odo compatible), por ejemplo, para ver cada valor de byte en decimal, hexadecimal, octal o como carácter.

  27
  1b
 033
 esc
 127
  7f
 177
 del

Respuesta3

Encontré un truco en otra parte para mostrar un solo carácter en bash usando read -rsn1 key && echo "$key" | xxd. Esto fue el 90% del camino hasta allí, pero estuve atrapado en esto por un tiempo porque simplemente obtenía 0x1b (Escape), que no era la imagen completa.

Luego lo cambié read -rsn2 key && echo "$key" | xxdy esto se amplía a la cantidad de personajes que tenga tu secuencia de escape, un poco de experimentación es suficiente. Entonces en mi terminal teníaambosCtrl+ y Alt+Retroceso asignados a 0x1b, 0x7f (meta-retroceso si se quiere) en el pasado por razones de conveniencia. En primer lugar, voy a seguir este camino porque quiero configurar un nuevo emulador de terminal que me permita eliminar palabras con ambas combinaciones, pero solo una de ellas funciona. In read -rsnbash es una buena herramienta para realizar un nivel inferior de depuración de resultados que cat.

información relacionada