0 votos

Mac Terminal no obedece la secuencia de escape ANSI "Show Cursor"; no puede recuperar la visibilidad del cursor, problema de estado sospechoso

Sistema:

Estoy escribiendo un script de Python 3 utilizando secuencias de escape ANSI en un Intel iMac Pro que ejecuta Monterey actualizado.

El problema:

Oculto el cursor cuando imprimo muchas animaciones ASCII en la pantalla. Cuando termino me gusta reiniciar la pantalla como última acción.

Pero el envío de "\033[?25h" a la pantalla después de que un script se haya ejecutado durante un tiempo no devuelve el cursor. Si envío el código de ocultar, luego sólo dormir durante 3 segundos, luego enviar la secuencia de mostrar-cursor, parece que funciona.

Investigación / Intentos:

También tuve la idea de "guardar el estado del cursor", y luego restaurar el estado del cursor, pero eso tampoco funcionó. He probado tanto la configuración ANSI ( ESC[7 y ESC[8 ) y los comandos VT ( ESC[s y ESC[u )

También he probado a utilizar curses.curs_set(0) y más tarde curses.curs_set(1) Tampoco ha funcionado. Esto no sólo deja el cursor invisible, sino que el eco de los caracteres también se desactiva, y creo que tal vez el salto de línea se estropea también.

También he probado los comandos unix " reset ; stty sane ; clear ", pero eso tampoco lo restablece. Esto me sorprendió mucho; la única solución que me queda es abrir una nueva pestaña de la terminal.

Vi un post (que no puedo encontrar ahora) que decía que tal vez había algo de estado problema con el programa Terminal de Mac, que a veces no funciona, pero otras veces sí, dependiendo de lo que se haya enviado previamente. Esto parece ser consistente con mi experiencia (que si restauro de inmediato funciona, pero después de mucho tráfico, no lo hace. Teniendo esto en cuenta, probé a enviar el comando de visibilidad un montón de veces, eso no ayudó.

También he intentado introducir las cadenas de escape en el código de Python de un par de maneras diferentes, como en "\e[?25h" y "\033[?25h" ; por supuesto, eso no sirvió de nada.

0 votos

¿Puede añadir un Ejemplo mínimo y reproducible para que otros puedan reproducir el problema y probar sus ideas antes de ¿los publican como respuesta?

1voto

muskwasis Puntos 21

Creo que lo que necesitamos aquí es la biblioteca de Curses. Ellos tienen las complejidades de los emuladores de terminal comunes todo resuelto. Puedes ocultar el cursor con curses.curs_set(0) y mostrarlo de nuevo con curses.curs_set(1) .

https://docs.Python.org/3/howto/curses.html

0 votos

Hola, gracias por la respuesta. Ya he probado curses.curs_set(0) y set(1), deja la ventana de terminal en un estado extraño (todavía no hay cursor, enredado con eco, etc).

0 votos

Lo más probable es que tu animación esté causando los problemas. Has probado a ejecutar tu animación usando también la librería curses?

0 votos

Hola, gracias. No, no lo hice, porque simplemente llamando curses.curs_set(0) y set(1), sin animación, desordena el terminal. Así que me había imaginado curses como un callejón sin salida.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X