2012-05-26 18 views
14

पर कर्सर कुंजी कोड शाप-आधारित पायथन प्रोग्राम में कीबाइंडिंग प्रदान करना चाहते हैं। आदर्श समाधान getch() के आस-पास एक अमूर्त परत होगी जो पठनीय तारों को उत्पन्न कर सकता है, शायद एक विम-जैसी प्रारूप में।पायथन: पर्स करने योग्य (vim-like?) सिंटैक्स

pythonese में:

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

तो मैं आसानी से एक dict समारोह में कुंजी के रूप में तार का उपयोग करके मैपिंग लागू कर सकता है।

क्या कोई पाइथन लाइब्रेरी है जो इस प्रकार की कार्यक्षमता प्रदान करती है, या इसे सब कुछ के लिए मैन्युअल रूप से नाम प्रदान करने से प्राप्त करने का एक आसान तरीका है?

+1

मैं [bypthon परियोजना] के लिए कोड को देख याद है (https://bitbucket.org/bobf/bpython) और यह सोच कर कि वे कुंजी के साथ निपटने के लिए एक बहुत अच्छी प्रणाली के लिए किया था, वे का उपयोग शाप और परियोजना को जांचने के लायक हो सकता है। महान सवाल हालांकि, इच्छा है कि मेरे पास एक बेहतर जवाब हो। मुझे इसके लिए एक लाइब्रेरी भी देखना अच्छा लगेगा। –

उत्तर

4

सभी गैर-विशेष कुंजी के लिए कोड वर्णों के असीसी कोड हैं, ताकि तालिका का हिस्सा बनाना आसान हो।

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

सभी विशेष पत्र के लिए कोड * KEY_ के रूप में शाप मॉड्यूल में उपलब्ध हैं स्थिरांक, इसलिए हम उन्हें इस सभी तरह प्राप्त कर सकते हैं:

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

तो तुम आप इस कोड के साथ मानचित्रण निर्माण कर सकते हैं :

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

बल्कि निवेश के लिए शाप का उपयोग कर, अगर आप का उपयोग libtermkey तो यह करने के लिए और मानव पठनीय तार से महत्वपूर्ण संरचनाओं को परिवर्तित करने के लिए, बस टी में आसान कार्य प्रदान की तुलना में उसका रूप विशेष रूप से कार्य termkey_strfkey और 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

यह एक सी पुस्तकालय है, लेकिन यह एक अजगर बाध्यकारी है; देख

https://github.com/temoto/ctypes_libtermkey

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^