Quería saber qué envía mi terminal para Ctrl+Retroceso y Alt+Retroceso, la forma estándar de hacer esto es ejecutar cat
en 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 cat
y 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 cat
no 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 -vte
con od -An -w1 -tu1 -tx1 -to1 -ta
(asumiendo GNU od
o 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" | xxd
y 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 -rsn
bash es una buena herramienta para realizar un nivel inferior de depuración de resultados que cat
.