2011-10-14 35 views
9

में ctrl + तीर (बाएं, दाएं, ...) के लिए टर्मिनल एस्केप अनुक्रम क्या है मैं ब्राउज़र में एक टर्मिनल विंडो बना रहा हूं (sth। AJAXterm की तरह) और यह नहीं पता कि कौन से भागने के अनुक्रम भेजने के लिए एसएस सुरंग के लिए (paramiko.SSHClient().invoke_shell(term='linux') के माध्यम से खोला गया)।TERM = linux

मैं एक key logger पाया है और $ अवधि == 'लिनक्स' के साथ एक टर्मिनल में यह कोशिश की, लेकिन यह ctrl+left और left (27,91,68) के लिए उसी क्रम देता है।

यदि मैं किसी अन्य टर्मिनल में ($ TERM == 'xterm' के साथ) कीलॉगर का प्रयास करता हूं तो मुझे कोड (27,91,49,59,53,68) मिलते हैं। लेकिन ये कोड एसएसएच चैनल से अनुमानित आउटपुट उत्पन्न नहीं करते हैं (जो एक सामान्य लिनक्स खोल पर कर्सर को एक शब्द छोड़ देगा)। यह सच है भले ही मैं शब्द = 'xterm' के साथ paramiko शुरू करें।

कोई विचार मुझे किस अनुक्रम का उपयोग करना चाहिए? या उपर्युक्त अनुक्रम क्यों काम नहीं करता है?

अद्यतन: मैं एक और टर्मिनल प्रकार (नहीं "लिनक्स") का उपयोग करने में खुशी होगी, लेकिन VTxxx टर्मिनलों के साथ दुर्भाग्य से pyte काम करता है केवल (मेरा मानना ​​है कि "लिनक्स" VT220 की तरह टर्मिनल है - वैसे भी, यह काम करता है), तो xterm ठीक से काम नहीं करता है।

+0

एक सामान्य डिफ़ॉल्ट रीडलाइन कॉन्फ़िगरेशन (बैश रीडलाइन का उपयोग करता है) में ** पिछड़ा-शब्द ** के लिए 'Alt-B' है। टर्मिनोफ़ में 'Ctrl- ←' के लिए प्रविष्टि भी नहीं है। – ninjalj

+0

लेकिन यह xterm कंसोल पर काम करता है ... क्या आप कृपया टर्मिनो के बारे में अधिक बता सकते हैं, अधिमानतः उत्तर में? – johndodo

+0

लिनक्स कंसोल vt220 तक * बंद * भी नहीं है। यह (कम सक्षम) vt100 का सबसेट है। इस प्रश्न के प्रत्येक जवाब में कम से कम एक त्रुटि है। –

उत्तर

21

टर्मिनल हार्डवेयर डिवाइस थे जिनमें कीबोर्ड और आउटपुट डिवाइस शामिल था (प्रारंभ में एक हार्डकॉपी प्रिंटर, बाद में एक सीआरटी मॉनीटर)। एक बड़े कंप्यूटर से जुड़े कई दूरस्थ टर्मिनल हो सकते हैं। प्रत्येक टर्मिनल में कंप्यूटर के साथ कुशलतापूर्वक संचार करने के लिए प्रोटोकॉल होगा, सीआरटी-आधारित टर्मिनल के लिए इसमें कर्सर स्थिति बदलने के लिए विशेष "नियंत्रण अनुक्रम" होना चाहिए, वर्तमान लाइन/स्क्रीन के हिस्सों को मिटाना, वैकल्पिक पूर्ण-स्क्रीन मोड पर स्विच करना शामिल है। ..

टर्मिनल एमुलेटर उन पुराने टर्मिनलों में से एक को अनुकरण करने वाला एक एप्लिकेशन है। यह कर्सर पोजीशनिंग, अग्रभूमि और पृष्ठभूमि रंगों को स्थापित करने जैसे कार्यों को करने की अनुमति देता है ... टर्मिनल अनुकरणकर्ता कुछ विशिष्ट टर्मिनल प्रोटोकॉल का अनुकरण करने का प्रयास करते हैं, लेकिन प्रत्येक के पास क्विर्क और विचलन का अपना सेट होता है।

यूनिक्स सिस्टम में टर्मिनल और टर्मिनल अनुकरणकर्ताओं का वर्णन करने वाले डेटाबेस हैं, इसलिए अनुप्रयोगों को उपयोग में विशेष टर्मिनल (या टर्मिनल एमुलेटर) से अलग किया जाता है। एक पुराना डेटाबेस termcap(5) है, जबकि terminfo(5) एक नया डेटाबेस है। ये डेटाबेस अनुप्रयोगों को उपयोग में टर्मिनल की क्षमताओं के लिए पूछने की अनुमति देते हैं। क्षमताओं में बुलियन, संख्यात्मक क्षमताओं या यहां तक ​​कि स्ट्रिंग क्षमताओं भी हो सकते हैं, उदाहरण के लिए: यदि कोई विशिष्ट टर्मिनल प्रकार F12 कुंजी का समर्थन/समर्थन करता है, तो इसकी क्षमता "key_f12" (long terminfo name), "kf12" (लघु टर्मिफ़ो नाम) होगी, कुंजी उत्पन्न करने वाली स्ट्रिंग का वर्णन करने वाला "एफ 2" (टर्मकैप नाम)। इसे आजमाएं: tput kf12 | od -tx1

के बाद से क्षमताओं के साथ सीधे प्रोग्रामिंग बोझिल हो सकता है, के प्रयोगों को विशिष्ट शाप/ncurses, खिचड़ी, आदि जैसे, एक उच्च स्तरीय पुस्तकालय ... का उपयोग

एक विशेष वातावरण चर TERM कहा जाता है कि बताता है अनुप्रयोगों क्या टर्मिनल प्रकार है वे बात कर रहे हैं। यह चर मानक परिणामों के लिए डेटाबेस में मौजूद होने पर सटीक टर्मिनल प्रकार पर सेट किया जाना चाहिए। यह सिर्फ उस एप्लिकेशन को बताता है जो सटीक प्रोटोकॉल और प्रोटोकॉल विचलन टर्मिनल को समझता है। TERM परिवर्तनीय बदलना टर्मिनल प्रकार को परिवर्तित नहीं करता है, यह केवल उस टर्मिनल प्रकार को बदलता है जिसे एप्लिकेशन सोचता है कि यह बात कर रहा है।

सभी ने कहा, Ctrl+arrow एक xterm व्यवहार (कॉन्फ़िगरेशन विकल्प पर निर्भर) है जो टर्मिनो/टर्मकैप डेटाबेस में बिल्कुल दिखाई नहीं देता है, इसलिए अधिकांश अनुप्रयोगों को इसका कोई ज्ञान नहीं होगा। किसी भी तरह से, या तो आपका टर्मिनल एमुलेटर (आपके मामले में pyte) इसका समर्थन करता है या नहीं।

अपने मुख्य आवेदन मानते हुए bash है या कोई अन्य एप्लिकेशन readline पुस्तकालय का उपयोग करता है, तो आप ReadLine के backward-word का उपयोग कर के साथ भाग प्राप्त कर सकते हैं (डिफ़ॉल्ट रूप से मेटा-बी/Alt-बी/ESC ख, inputrc में विन्यास) के बजाय।

8

od -c के साथ एक त्वरित जांच से पता चलता है कि सूक्ति-termainal इन मूल्यों को उत्पन्न करता है:

वाम तीर उत्पन्न ESC - [ - D

नियंत्रण बाएं सरणी geneates ESC - [ - 1 - ; - 5 - D

+0

ठीक है, लेकिन gnome टर्मिनल TERM = xterm है ... लिनक्स के बारे में क्या? – johndodo

+1

लिनक्स कंसोल दोनों कीस्ट्रोक के लिए 'ESC'-' ['-'D' उत्पन्न करता है। –

+0

मुझे पता है कि यह करता है, मैंने ऐसा लिखा है ... :) फिर भी, यह कंसोल-विशिष्ट या टर्मिनल-विशिष्ट है? – johndodo

4

Ctrl + तीर keycodes टर्म द्वारा शुरू किए गए थे, और ग्नोम टर्मिनल और केडीई कंसोल की पसंद टर्म के साथ संगत होना करने की कोशिश । वास्तविक वीटी 100 और वीटी -220 टर्मिनलों में ऐसे संयोजनों के लिए अलग-अलग कीकोड नहीं थे। जहां तक ​​मुझे पता है, लिनक्स कंसोल का लक्ष्य वीटी 100 के साथ संगत होना है, कुछ अतिरिक्तताओं के साथ, जबकि xterm VT220 को बहुत सारे जोड़ों के साथ अनुकरण करता है।

+0

लिनक्स कंसोल VT100 का अनुकरण करने की कोशिश करना बंद कर दिया, लेकिन 1 99 0 के दशक के अंत में जब यूटीएफ -8 समर्थन जोड़ा गया था, तब उसका एक हिस्सा (चरित्र सेट के बीच स्विचिंग) खो गया था। लिनक्स कंसोल ने VT220 (या 1 99 0 के दशक की शुरुआत में xterm कार्यान्वयन) के आधार पर फ़ंक्शन कुंजियां (एक विशेषता VT100 का हिस्सा नहीं) लागू की है। Xterm के विपरीत, लिनक्स फ़ंक्शन की सुविधा को विस्तारित नहीं किया गया था। –