जवाबों:
टर्मिनल कैसे कॉन्फ़िगर किया गया है, इस पर निर्भर करते हुए, टाइपिंग अनुक्रम में कुंजियों और कुंजियों को Alt+Keyटाइप करने की तरह है , इसलिए यह ESC वर्ण (उर्फ या या ) और इसके बाद भेजे गए वर्णों के चरित्र या अनुक्रम को भेजता है ।EscKey\e
^[
\033
Key
दबाने पर Up, सबसे टर्मिनल emulators या तो तीन पात्रों भेजने \033[A
या \033OA
कि क्या वे आवेदन कीपैड मोड में है या नहीं कर रहे हैं पर निर्भर करता है।
पहले वाला बच निकलने के क्रम से मेल खाता है जो टर्मिनल पर आउटपुट करते समय कर्सर को ऊपर ले जाता है। यदि तुम करो:
printf '\nfoo\033[Abar\n\n'
आप एक पंक्ति के bar
बाद लिखा देखेंगे foo
। यदि तुम करो:
stty -echoctl; tput rmkx; read foo
आप देखेंगे कि तीर कुंजियाँ कर्सर को चारों ओर घुमाती हैं।
जब कोई एप्लिकेशन टर्मिनल से वर्णों के अनुक्रम को पसंद करता है zsh
या vi
पढ़ता है, तो वह इसे "अप" कार्रवाई के रूप में व्याख्या करता है, क्योंकि यह टर्मोफ डेटाबेस ( kcuu1
क्षमता) से पता चलता है कि यह दबाने पर भेजा गया अनुक्रम है Up।
अब, के लिए Alt-Up, जैसे कुछ टर्मिनलों rxvt
और की तरह अपने डेरिवेटिव eterm
भेजने \033
के लिए एस्केप अनुक्रम के बाद Up(है कि \033\033[A
या \033\033OA
) है, जबकि तरह कुछ अन्य लोगों xterm
या gnome-terminal
कुंजी के उन प्रकार के लिए अलग से बच दृश्यों जब की तरह संयोजन कुंजी के साथ प्रयोग किया जाता है Alt, Shift, Ctrl।
उन आम तौर पर भेज देंगे \033[1;3A
पर Alt-Up।
जब टर्मिनल पर भेजा जाता है, तो वह अनुक्रम कर्सर को ऊपर ले जाएगा (दूसरा पैरामीटर (3) को अनदेखा किया गया है)। कोई संबंधित कीपैड कुंजी नहीं है, इसलिए यह एक ही क्रम Alt-Upहै जो एप्लिकेशन कीपैड मोड में या उसके बाहर भेजा जाता है ।
अब यह है \033\033[A
या \033[1;3A
, कई अनुप्रयोगों को पता नहीं है कि वे क्रम क्या हैं। टर्मऑफ़ डेटाबेस उनकी मदद नहीं करेगा, क्योंकि ऐसी कोई क्षमता नहीं है जो उन प्रमुख संयोजनों को किस वर्ण को परिभाषित करती है।
वे उस क्रम की व्याख्या करने की पूरी कोशिश करेंगे। bash
उदाहरण के लिए \033[1;3
एक एस्केप सीक्वेंस के रूप में व्याख्या करेंगे, इसके बारे में कुछ भी नहीं जानते हैं, इसलिए इसके बाद कुछ भी नहीं करते हैं A
। zsh
, जैसे ही यह पता चलता है कि कोई ज्ञात मिलान अनुक्रम नहीं है, पढ़ना बंद कर देगा। कोई बच निकलने का क्रम नहीं है कि यह जानता है कि इसके साथ शुरू होता है, \033[1
इसलिए वह इसे छोड़ देगा, और बाकी को पढ़ेगा: ;3A
और लाइन संपादक में सम्मिलित करेगा।
जैसे कई अनुप्रयोगों vi
, zsh
या readline
की तरह आधारित वाले gdb
या bash
(हालांकि सावधान रहना bash
का उपयोग करता है का एक संशोधित संस्करण readline
) आप वर्णों के किसी भी दृश्य के लिए बाइंडिंग जोड़ सकते हैं।
उदाहरण के लिए, में zsh
, आप बांधना चाह सकते हैं Alt-Up, Alt-Downजैसे:
bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward
वे इतिहास को पीछे की ओर खोजते हैं और कमांड लाइनों के लिए आगे बढ़ते हैं जो वर्तमान की तरह कर्सर की वर्तमान स्थिति तक होती है जो पिछले आदेशों को याद करने के लिए काफी आसान है।
आप अपने कीबोर्ड के इनपुट कोड वापस करने के लिए Crtl+ vका उपयोग कर सकते हैं । आप तीर कुंजी के लिए कि ऐसा करने पर आप मिल जाएगा [[D^
, [[C^
, [[A^
, और [[B
मूल्यों। Alt+ एरो कुंजियों के लिए कोई डिफ़ॉल्ट बाइंडिंग नहीं हैं , इसलिए ऐसा लगता है कि प्रदर्शन किया गया एक्शन कोड पत्र को अकेले प्रिंट कर रहा है। होवेवर, यदि आप रीडलाइन लाइब्रेरी कॉन्फ़िगरेशन फ़ाइल का अपना स्थानीय संस्करण बनाते हैं:
$ cp /etc/inputrc ~/.inputrc
और एक पंक्ति जोड़ें:
"\e[1;3C": "sometexthere"
जहां + [1;3C
का इनपुट कोड है (आप इसे उसी तरह प्राप्त कर सकते हैं जैसे कि + शॉर्टकट का उपयोग करने से पहले ) और अपने टर्मिनल को फिर से शुरू करें + फिर शॉर्टकट आपको "कहीं और" पाठ वापस कर देगा और अन्य + तीर शॉर्टकट अक्षर लौटाना बंद कर देंगे।Alt→CrtlvCrtl→Alt
पाठ के बजाय आप http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands से एक बाइंडेबल कमांड पास कर सकते हैं
"\e[1;3C": unix-line-discard
Crtl+ u(डिलीट लाइन) जैसे समान प्रभाव के लिए ।
अधिक जानकारी यहाँ: http://cnswww.cns.cwru.edu/php/chet/readline/readline.html
Altकुंजी अक्सर एक के रूप में प्रयोग किया जाता है मेटा संशोधक। कर्सर- और फ़ंक्शन-कुंजी को विशेष कुंजी के रूप में संदर्भित किया जाता है क्योंकि वे कई पात्रों को भेज सकते हैं - और जो अक्षर भेजे जाते हैं उन्हें बदल दिया जा सकता है।
कुछ उपयोगकर्ता, उदाहरण के लिए, bash
उम्मीद करते हैं कि दबाने Altसे बच चरित्र द्वारा एक कुंजी उपसर्ग भेज दिया जाएगा। प्रलेखित "मेटा" सुविधा (देखें terminfo(5)
) आठवें बिट से संबंधित है:
यदि टर्मिनल में "मेटा कुंजी" है जो शिफ्ट कुंजी के रूप में कार्य करता है, तो प्रेषित किसी भी वर्ण के 8 बिट को स्थापित करने के साथ, इस तथ्य के साथ संकेत दिया जा सकता है
km
। अन्यथा, सॉफ्टवेयर यह मान लेगा कि 8 वीं बिट समता है और यह आमतौर पर साफ हो जाएगी। यदि स्ट्रिंग्स इस "मेटा मोड" को चालू और बंद करने के लिए मौजूद हैं , तो उन्हें इस रूप मेंsmm
और दिया जा सकता हैrmm
।
bash
इसके बारे में भी जानता है, ( ncurses FAQ देखें ), लेकिन इसके कुछ उपयोगकर्ता इस सुविधा में रुचि रखते हैं। फिर भी, वे Alt"मेटा" के रूप में संदर्भित करने के आदी हैं , भले ही मेटा मोड बंद हो। Rxvt और xterm दोनों में 1990 के दशक की शुरुआत से (कम से कम) यह सुविधा थी।
अन्य उपयोगकर्ता (जब से पैच # 94xterm
में सुविधा को पेश किया गया है , 1999 ) संशोधक सूचना को वर्णों के अनुक्रम में एक पैरामीटर के रूप में एन्कोड किया जा सकता है, जो एक विशेष कुंजी भेजेगा। XTerm के प्रलेखन ने इन संशोधित कुंजियों को " VT220- शैली" (जिसमें संशोधक नहीं था) से अलग करने के लिए "पीसी-शैली" फ़ंक्शन कुंजियों के रूप में संदर्भित किया। एक अनमॉडिफायड कर्सर कुंजी भेज सकता है ESC[A, लेकिन इसके लिए एक पैरामीटर , जैसे, कानूनी भी है ESC[5A, जिसे किसी एप्लिकेशन को उस पांच बार दोहराने के रूप में समझना चाहिए । xterm
" पीसी " शैली कुंजी का पहला संस्करण इस्तेमाल किया कि "5" निरूपित करने के लिएcontrol, और बाद के संस्करण ने इसे दोहराने की गिनती के साथ भ्रम से बचने के लिए बदल दिया। इसलिए...
ESC[5A
पता चलता है कि आवेदन कर्सर को 5 पंक्तियों तक ले जाता है, जबकि
ESC[1;5A
यह बताता है कि यह एक पंक्ति को आगे बढ़ाता है, यह बताता है कि एक controlकुंजी दबाया गया था।
उपयोगी संयोजन 2004 से ncurses termfo डेटाबेस में हैं :
# 2004-07-17
# * add xterm-pc-fkeys -TD
टर्मऑफ़ डेटाबेस xterm + pcfkeys के वर्तमान संस्करण को एक टिप्पणी के साथ दिखाता है कि संशोधक कैसे एन्कोड किए गए हैं:
# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
# Code Modifiers
# ---------------------------------
# 2 Shift
# 3 Alt
# 4 Shift + Alt
# 5 Control
# 6 Shift + Control
# 7 Alt + Control
# 8 Shift + Alt + Control
# ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.
(Alt और मेटा जरूरी समान कुंजी नहीं है)। यह एक बिल्डिंग ब्लॉक है (बदले में अन्य बिल्डिंग ब्लॉक से बना है) जिसमें से xterm
टर्मिनल विवरण बनता है। यह 1999 से ncurses में दिए गए एक एक्सटेंशन का उपयोग करता है जो उपयोगकर्ता द्वारा परिभाषित नामों की अनुमति देता है। चूंकि टर्मकैप केवल 2-वर्ण नामों और 1023-बाइट विवरणों का समर्थन करता है, इसलिए इन विस्तारित नामों को टर्मकैप इंटरफ़ेस के माध्यम से उपलब्ध कराने का कोई कारण नहीं था । वे आसानी से टर्मिनल इंटरफ़ेस का उपयोग कर अनुप्रयोगों के लिए उपलब्ध हैं ।
अब एक कठिनाई आती है: एक आवेदन के लिए कुछ तरीके हैं जो यह निर्धारित करते हैं कि एक प्रमुख अनुक्रम क्या दर्शाता है:
कुछ कार्यक्रम पहले करेंगे; कुछ पाठ संपादक दूसरा (वास्तव में, मैंने किया क्या करना होगा इस के लिए ded
में देर से 1980 )। अनुप्रयोगों के लिए डेवलपर्स जैसे bash
यह सोचते हैं कि जानकारी के अधिकांश में है द्वारा तीसरे मार्ग चुना है termcap । वैकल्पिक रूप से, वे termcap / termfo जानकारी के साथ एक तालिका बनाने और इंटरफ़ेस का उपयोग करने के लिए चुन सकते हैं जिसने सबसे अच्छी जानकारी दी। xterm
यह tcap-query सुविधा के लिए करता है , vim
वास्तविक फ़ंक्शन कुंजी असाइनमेंट के साथ प्रदान करता है।
चूँकि bash
जो तार इसे प्राप्त करता है, उससे मेल खाने वाले तार की तुलना में कोई भी , यह भ्रमित हो सकता है, आंशिक मैचों के लिए बसना (जैसे कि खुद से भागने वाला चरित्र)।
आगे की पढाई: