2012-05-26 16 views
14

Deseo proporcionar combinaciones de teclas en un programa python basado en curses. La solución ideal sería tener una capa de abstracción alrededor de getch() que produzca cadenas legibles, tal vez en un formato parecido a vim.Python: cursiva los códigos clave a la sintaxis legible (¿similar a vim?)

En pythonese:

def get_keycomb(wind): 
    string = read_keycomb(wind) # read with wind.getch() as needed 
    return string # something like '<C-S-a>' 

entonces podría implementar fácilmente mediante el uso de asignaciones de las cadenas como claves en una función dict.

¿Hay una biblioteca de Python que proporcione este tipo de funcionalidad, o una forma más sencilla de lograrlo que proporcionando nombres manualmente para todo?

+1

Recuerdo mirar el código para el [bypthon proyecto] (https://bitbucket.org/bobf/bpython) y pensando que tenían un buen sistema para tratar con las llaves, que utilizan maldiciones y podría valer la pena verificar el proyecto. Gran pregunta, desearía tener una mejor respuesta. Me encantaría ver una biblioteca para esto también. –

Respuesta

4

Los códigos para todas las claves no especiales son los códigos ascii de los caracteres, por lo que parte de la tabla es fácil de construir.

char_codes = {chr(i):i for i in range(256)} 

Los códigos para todas las promociones especiales letras están disponibles en los módulos de maldiciones como KEY_ * constantes, por lo que podemos llegar a todos ellos de esta manera:

specials_codes = {name[4:]: value for name, value in vars(curses).items() 
    if name.startswith('KEY_')} 

para que pueda construir que el mapeo con este código :

import curses 

mapping = {chr(i):i for i in range(256)} 
mapping.update((name[4:], value) for name, value in vars(curses).items() 
    if name.startswith('KEY_')) 

print(mapping) 
1

en lugar de utilizar maldiciones para la entrada, si se utiliza libtermkey entonces proporciona funciones fáciles para la conversión de las estructuras clave desde y hacia las cadenas legibles, en tan sólo t su forma. Específicamente las funciones termkey_strfkey y termkey_strpkey.

http://www.leonerd.org.uk/code/libtermkey/doc/termkey_strfkey.3.html

http://www.leonerd.org.uk/code/libtermkey/doc/termkey_strpkey.3.html

Esta es una biblioteca C, pero que sí tiene un enlace de Python; veo

https://github.com/temoto/ctypes_libtermkey

Cuestiones relacionadas