Supongamos que la ventana de su terminal tiene 80 columnas de ancho y ejecuta un script de Python que contiene solo:
print("x" * 81 + "\b\by")
Es de esperar que el resultado sea una línea llena x
excepto la última, que debería ser un archivo y
. Mi problema es que el resultado que obtengo es una línea llena x
y una segunda línea que contiene un solitario y
. El hecho es que siempre que se va a imprimir el carácter de retroceso en la salida estándar, funciona como se esperaba, excepto cuando hay líneas ajustadas y se debe colocar el cursor una línea arriba: en ese caso parece estar excluido del búfer de salida estándar.
Puedo reproducir este comportamiento de varias maneras siguiendo las líneas del fragmento anterior, por ejemplo, echo -e "xx...x\b\by"
probé con bash y sh, printf(...);
para C/C++, cout << ...;
para C++. El mismo problema cuando cat
un archivo que contiene caracteres de retroceso y también cuando se escribe para una lectura estándar que ocupa más de una línea de ventana de terminal. En el último caso, '\b'
los caracteres se sustituyen presionando la tecla de retroceso varias veces: cuando excedo el ancho de la ventana y las líneas se ajustan, no puedo llegar a las líneas anteriores presionando repetidamente la tecla de retroceso, pero esos accesos se procesan como lo espera el programa que llama, por ejemplo en una scanf("%s", s);
llamada, s
contendría 79 x
y 1 y
, siguiendo el ejemplo anterior. Lo curioso aquí es que si cambio el tamaño de la ventana de modo que la nueva posición del cursor ya no esté en la primera columna de la ventana, entonces puedo retroceder hasta el nuevo lugar de la primera columna y seguir adelante de esta manera hasta que solo haya una. la línea terminal queda a la izquierda; luego resulta que hay una posición en la que no puedo retroceder más, pero no pude descubrir cómo predecir esa posición.
Finalmente, otra situación en la que las líneas ajustadas y el retroceso se encuentran es cuando se escribe un comando largo y se desea retroceder hasta la primera línea. No tengo problemas para hacer eso.
Estoy usando Ubuntu 18.04 y probé todo lo anterior con varios emuladores de terminal, a saber, gnome-terminal, xvt y tilda. Cualquier pista sería muy apreciada. ¡Gracias!
Respuesta1
tmux
, screen
, urxvt
compórtate como quieras. xterm
se puede cambiar a ese comportamiento habilitandomodo envolvente inverso: printf '\e[?45h'
.
Es un legado, de hecho roto por diseño, y a nadie realmente le importó arreglarlo. Hay más problemas que el que usted señaló. VerTEV número 62para mas detalles.
al escribir un comando largo y estar dispuesto a retroceder hasta la primera línea. No tengo problemas para hacer eso.
En este caso, está utilizando la edición de líneas del shell (por ejemplo, la biblioteca readline), que realiza un manejo de pantalla más complejo que simplemente emitir un retroceso.
Respuesta2
Windows 7Python 3.7.4
print("x" * 81 + "y")
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
¿Es eso lo que quieres?