Alt + एरो कीज दबाए जाने पर कौन से अक्षर प्रिंट होते हैं?


13

जब मैं प्रेस करता हूं AltUp, तो Aटर्मिनल स्क्रीन पर मुद्रित होता है। जब मैंने दबाया तो वही हुआ AltDownलेकिन Bइसके बजाय मुद्रित किया जाता है।

अन्य चरित्र जो मुझे एहसास हुआ;

AltLeft= Dऔर AltRight=C

इन आदेशों का उद्देश्य क्या है?

जवाबों:


14

टर्मिनल कैसे कॉन्फ़िगर किया गया है, इस पर निर्भर करते हुए, टाइपिंग अनुक्रम में कुंजियों और कुंजियों को Alt+Keyटाइप करने की तरह है , इसलिए यह ESC वर्ण (उर्फ या या ) और इसके बाद भेजे गए वर्णों के चरित्र या अनुक्रम को भेजता है ।EscKey\e^[\033Key

दबाने पर 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एक एस्केप सीक्वेंस के रूप में व्याख्या करेंगे, इसके बारे में कुछ भी नहीं जानते हैं, इसलिए इसके बाद कुछ भी नहीं करते हैं Azsh, जैसे ही यह पता चलता है कि कोई ज्ञात मिलान अनुक्रम नहीं है, पढ़ना बंद कर देगा। कोई बच निकलने का क्रम नहीं है कि यह जानता है कि इसके साथ शुरू होता है, \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

वे इतिहास को पीछे की ओर खोजते हैं और कमांड लाइनों के लिए आगे बढ़ते हैं जो वर्तमान की तरह कर्सर की वर्तमान स्थिति तक होती है जो पिछले आदेशों को याद करने के लिए काफी आसान है।


3

आप अपने कीबोर्ड के इनपुट कोड वापस करने के लिए Crtl+ vका उपयोग कर सकते हैं । आप तीर कुंजी के लिए कि ऐसा करने पर आप मिल जाएगा [[D^, [[C^, [[A^, और [[Bमूल्यों। Alt+ एरो कुंजियों के लिए कोई डिफ़ॉल्ट बाइंडिंग नहीं हैं , इसलिए ऐसा लगता है कि प्रदर्शन किया गया एक्शन कोड पत्र को अकेले प्रिंट कर रहा है। होवेवर, यदि आप रीडलाइन लाइब्रेरी कॉन्फ़िगरेशन फ़ाइल का अपना स्थानीय संस्करण बनाते हैं:

$ cp /etc/inputrc ~/.inputrc

और एक पंक्ति जोड़ें:

"\e[1;3C": "sometexthere"

जहां + [1;3Cका इनपुट कोड है (आप इसे उसी तरह प्राप्त कर सकते हैं जैसे कि + शॉर्टकट का उपयोग करने से पहले ) और अपने टर्मिनल को फिर से शुरू करें + फिर शॉर्टकट आपको "कहीं और" पाठ वापस कर देगा और अन्य + तीर शॉर्टकट अक्षर लौटाना बंद कर देंगे।AltCrtlvCrtlAlt

पाठ के बजाय आप 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


3

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-बाइट विवरणों का समर्थन करता है, इसलिए इन विस्तारित नामों को टर्मकैप इंटरफ़ेस के माध्यम से उपलब्ध कराने का कोई कारण नहीं था । वे आसानी से टर्मिनल इंटरफ़ेस का उपयोग कर अनुप्रयोगों के लिए उपलब्ध हैं ।

अब एक कठिनाई आती है: एक आवेदन के लिए कुछ तरीके हैं जो यह निर्धारित करते हैं कि एक प्रमुख अनुक्रम क्या दर्शाता है:

  1. पात्रों के अनुक्रम का पूरी तरह से विश्लेषण करें
  2. आंशिक रूप से इसका विश्लेषण करें और controlयदि आवश्यक न हो तो संशोधक को फेंक दें
  3. सिर्फ एक शब्दकोश के खिलाफ पात्रों के अनुक्रम की तुलना करें, इस तरह से अर्थ निर्धारित करने की उम्मीद है।

कुछ कार्यक्रम पहले करेंगे; कुछ पाठ संपादक दूसरा (वास्तव में, मैंने किया क्या करना होगा इस के लिए dedमें देर से 1980 )। अनुप्रयोगों के लिए डेवलपर्स जैसे bashयह सोचते हैं कि जानकारी के अधिकांश में है द्वारा तीसरे मार्ग चुना है termcap । वैकल्पिक रूप से, वे termcap / termfo जानकारी के साथ एक तालिका बनाने और इंटरफ़ेस का उपयोग करने के लिए चुन सकते हैं जिसने सबसे अच्छी जानकारी दी। xtermयह tcap-query सुविधा के लिए करता है , vimवास्तविक फ़ंक्शन कुंजी असाइनमेंट के साथ प्रदान करता है।

चूँकि bashजो तार इसे प्राप्त करता है, उससे मेल खाने वाले तार की तुलना में कोई भी , यह भ्रमित हो सकता है, आंशिक मैचों के लिए बसना (जैसे कि खुद से भागने वाला चरित्र)।

आगे की पढाई:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.