2012-07-05 11 views
8

में डालने के लिए वापस लौटें। मैं सामान्य आईएम क्लाइंट्स का व्यवहार प्राप्त करने की कोशिश कर रहा हूं जो Return का उपयोग टेक्स्ट भेजने के लिए Shift + Return का उपयोग करने के लिए करते हैं। क्या पाइथन में न्यूनतम प्रयास के साथ इसे प्राप्त करने का कोई तरीका है, उदाहरण के लिए readline और raw_input?शिफ्ट + पायथन

+0

आप मंच पर निर्भर या स्वतंत्र जवाब के लिए देख रहे हैं? – Jiri

+0

यदि संभव हो तो प्लेटफ़ॉर्म स्वतंत्र है, लेकिन * निक्स संगत को एप्लिकेशन लक्ष्य कमांड लाइन उपयोगकर्ताओं के रूप में वैसे भी करना चाहिए। –

उत्तर

2

ठीक है, मैंने सुना है कि इसे readline के साथ भी पूरा किया जा सकता है।

आप import readline कर सकते हैं और एक मैक्रो में अपनी वांछित कुंजी (Shift + Enter) कॉन्फ़िगरेशन में सेट कर सकते हैं जो कुछ विशेष char को लाइन और न्यूलाइन के अंत में डाल देता है। फिर आप एक लूप में raw_input पर कॉल कर सकते हैं।

इस तरह:

import readline  
# I am using Ctrl+K to insert line break 
# (dont know what symbol is for shift+enter) 
readline.parse_and_bind('C-k: "#\n"') 
text = [] 
line = "#" 
while line and line[-1]=='#': 
    line = raw_input("> ") 
    if line.endswith("#"): 
    text.append(line[:-1]) 
    else: 
    text.append(line) 

# all lines are in "text" list variable 
print "\n".join(text) 
1

मुझे संदेह है कि आप केवल readline मॉड्यूल का उपयोग करने में सक्षम होंगे क्योंकि यह दबाए गए व्यक्तिगत कुंजी को कैप्चर नहीं करेगा और बल्कि आपके इनपुट ड्राइवर से वर्ण प्रतिक्रियाओं को संसाधित करेगा।

आप हालांकि PyHook साथ यह कर सकता है और अपने readline धारा में एक नया ऑनलाइन इंजेक्षन करने के लिए यदि Shift कुंजी Enter कुंजी के साथ दबाया जाता है।

+0

धन्यवाद, लेकिन मैं * निक्स के साथ प्लेटफार्म संगतता बनाए रखना चाहता हूं! –

1

मुझे लगता है कि न्यूनतम प्रयास के साथ आप पाइथन के लिए urwid लाइब्रेरी का उपयोग कर सकते हैं। दुर्भाग्यवश, यह आपकी आवश्यकता को रीडलाइन/raw_input का उपयोग करने के लिए संतुष्ट नहीं करता है।

अद्यतन: अन्य समाधान के लिए कृपया this answer भी देखें।

0
import readline 
# I am using Ctrl+x to insert line break 
# (dont know the symbols and bindings for meta-key or shift-key, 
# let alone 4 shift+enter) 

def startup_hook(): 
    readline.insert_text('» ') # \033[32m»\033[0m 

def prmpt(): 
try: 
    readline.parse_and_bind('tab: complete') 
    readline.parse_and_bind('set editing-mode vi') 
    readline.parse_and_bind('C-x: "\x16\n"') # \x16 is C-v which writes 
    readline.set_startup_hook(startup_hook) # the \n without returning 
except Exception as e:      # thus no need 4 appending 
    print (e)        # '#' 2 write multilines 
    return    # simply use ctrl-x or other some other bind 
while True:    # instead of shift + enter 
    try: 
     line = raw_input() 
     print '%s' % line 
    except EOFError: 
     print 'EOF signaled, exiting...' 
     break 

# It can probably be improved more to use meta+key or maybe even shift enter 
# Anyways sry 4 any errors I probably may have made.. first time answering 
संबंधित मुद्दे