2012-05-26 13 views
14

küfürlere lanetli bir python programında sağlamak istiyorum. İdeal çözüm, okunabilir dizeleri veren, belki de vim benzeri bir formatta, getch() civarında bir soyutlama katmanına sahip olmak olabilir. pythonese olarakPython: anahtar kodları okunabilir (vim-like?) Sözdizimi

:

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

Sonra kolayca dict fonksiyonunda tuşları olarak dizeleri kullanılarak eşleştirmeleri uygulayabilir.

Bu tür işlevler sağlayan bir python kitaplığı veya bunu elde etmek için daha kolay bir yol var mı?

+1

(bkz https://bitbucket.org/bobf/bpython) ve tuşları ile uğraşan için oldukça iyi bir sistem olduğunu düşünerek, kullandıkları küfürler ve projeyi kontrol etmeye değer olabilir. Büyük soru olsa da, daha iyi bir cevabım olsaydı. Bunun için bir kütüphane de görmek isterim. –

cevap

4

Tüm özel olmayan anahtarların kodları, karakterlerin ascii kodlarıdır, bu nedenle tablonun bir kısmının oluşturulması kolaydır. Tüm özel mektuplar için

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

kodları * KEY_ olarak küfürler modüllerde sabitler mevcuttur, bu yüzden hepsini bu şekilde elde edebilirsiniz:

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

Yani bu kod ile haritalama inşa edebilirsiniz :

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

Aksine sen libtermkey sonra sadece t içinde, insanlar tarafından okunabilir dizeleri ve anahtar yapıları dönüştürmek için kolay fonksiyonları sağlar kullanırsanız, giriş için lanetler kullanmaktan daha onun formu. Özellikle termkey_strfkey ve termkey_strpkey işlevleri.

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

Bu

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

C kütüphanesidir, ancak Python bağlama var; Ben [bypthon proje] için kod bakarak hatırlıyorum

https://github.com/temoto/ctypes_libtermkey