tutorial npyscreen nodelay libreria courses python keyboard python-curses

npyscreen - tutorial curses python



¿Por qué la clave de escape tiene un retraso en las maldiciones de Python? (3)

Curses trata con "secuencias de escape" desde su terminal para representar comandos en el software. Estas secuencias normalmente comienzan con un carácter de escape. En consecuencia, cuando presiona ESC, el código de maldición no emite nada inmediatamente en caso de que esto represente el inicio de una secuencia de escape.

En el módulo Python curses , he observado que hay un retraso de aproximadamente 1 segundo entre presionar la tecla esc y getch() regresa. Este retraso no parece ocurrir para otras teclas. ¿Por qué sucede esto y qué puedo hacer al respecto?

Caso de prueba:

import curses import time def get_delay(window, key): while True: start = time.time() ch = window.getch() end = time.time() if ch == key: return end-start def main(stdscr): stdscr.clear() stdscr.nodelay(1) stdscr.addstr("Press ESC") esc_delay = get_delay(stdscr, 27) stdscr.addstr("/nPress SPACE") space_delay = get_delay(stdscr, ord('' '')) return esc_delay, space_delay if __name__ == ''__main__'': esc_delay, space_delay = curses.wrapper(main) print("Escape delay: {} ms".format(esc_delay*1000)) print("Space delay: {} ms".format(space_delay*1000))

Resultados:

Escape delay: 1001.09195709 ms Space delay: 0.00596046447754 ms


ESCDELAY = 25 ... pon esto en global.


Para personalizar el retraso de Esc, puede configurar la variable de entorno ESCDELAY que usa las maldiciones para determinar el tiempo en milisegundos que espera antes de que entregue la clave de escape.

Para definir esta variable en Python, por ejemplo, podría llamar a la siguiente función antes de llamar a curses.wrapper(main) :

def set_shorter_esc_delay_in_os(): os.environ.setdefault(''ESCDELAY'', ''25'')

que establecerá la variable de entorno en 25 ms si no se ha establecido antes.

Más información: http://en.chys.info/2009/09/esdelay-ncurses/ .

Ver también la página man de ncurses .