2012-05-26 11 views
14

Chcę udostępnić skróty w programie Pythona opartym na cursach. Idealnym rozwiązaniem byłoby posiadanie warstwy abstrakcji wokół getch(), która daje czytelne łańcuchy, może w formacie podobnym do vima.Python: przeklina kluczowe kody do czytelnej składni (vim-like?)

W pythonese:

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

Wtedy mógłbym łatwo wdrożyć mapowania za pomocą struny jako klucze w dict funkcji.

Czy istnieje biblioteka Pythona, która zapewnia tego rodzaju funkcjonalność, lub łatwiejszy sposób osiągnięcia tego niż ręczne podawanie nazw wszystkiego?

+1

Pamiętam, patrząc na kod dla [bypthon Project] (https://bitbucket.org/bobf/bpython) i myśli, że mieli dość dobry system do czynienia z klawiszy, używają przekleństwa i może warto sprawdzić projekt. Świetne pytanie, chciałbym mieć lepszą odpowiedź. Bardzo bym chciał zobaczyć bibliotekę. –

Odpowiedz

4

Kody wszystkich kluczy nie będących specjalnymi to kody ASCII znaków, więc część tabeli jest łatwa do zbudowania.

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

Kody wszystkie promocje listów dostępne są w modułach przeklina jak KEY_ * stałe, dzięki czemu możemy je wszystkie w ten sposób:

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

Więc można zbudować Ci mapowanie z tym kodem :

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

Zamiast używać przekleństw na wejściu, jeśli używasz libtermkey to zapewnia proste funkcje do konwersji kluczowych struktur i od strun czytelnej dla człowieka, tylko w t jego forma. W szczególności funkcje termkey_strfkey i 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

to biblioteka C lecz nie wykazują dużego wiązania z języka; zobacz

https://github.com/temoto/ctypes_libtermkey