बैश की मेटा कुंजी क्या है?


16

मैंने कुंजी xmodmapको मैप META_Lकरने के लिए उपयोग करने की कोशिश की , MENUलेकिन यह bashमेटा कुंजी के रूप में स्वीकार नहीं किया गया है । इसलिए, मैं सोच रहा हूं कि मेटा-और सुपर-कीस के संबंध में ये घटक (कीबोर्ड, एक्स, एक्सटर्म, बैश) कैसे संबंधित हैं। किसी भी स्पष्टीकरण की सराहना की जाएगी।

मुझे यह एक और तरीका है। उदाहरण के लिए, बैश मैन पेज कहता है कि फ़ंक्शन yank-nth-arg के लिए बाध्य है M-C-yऔर यह तब काम करता है जब मैं दबाता हूं Esc-Control-y। लेकिन मुझे यह थोड़ा बोझिल लगता है। तो मैं कैसे अपने सभी डिफ़ॉल्ट बाइंडिंग के लिए Meta(जैसे Menu) एक और कुंजी स्वीकार कर सकता हूं ?


क्या आपकी MENUकुंजी भी X द्वारा देखी गई है? आप किस विंडो मैनेजर का उपयोग कर रहे हैं - उनमें से कुछ आपकी चाबियों को फिर से परिभाषित करने में आपकी मदद कर सकते हैं।
कोरोबा

जवाबों:


11

कीबोर्ड कीज़ से मोडिफ़ायर की तरह मैपिंग Metaऔर Controlएक्स सर्वर (यानी जीयूआई के निम्न-स्तरीय भाग) द्वारा नियंत्रित किया जाता है। इस मैपिंग को पुरानी शैली के xmodmapकमांड या नए-शैली के XKB इंटरफ़ेस के माध्यम से या GUI कॉन्फ़िगरेशन टूल के माध्यम से हेरफेर किया जा सकता है जो हुड के नीचे इनमें से किसी एक का उपयोग करता है।

डिफ़ॉल्ट रूप से, अधिकांश सेटअप पर, Metaकुंजी लेबल की कुंजी होती है Alt। ऐसा इसलिए है क्योंकि ऐतिहासिक रूप से, कई यूनिक्स वर्कस्टेशनों में एक कुंजी लेबल होती है Metaजहां पीसी में एक कुंजी लेबल होती है Alt। इसलिए यदि आपके पास एक बंधन है M-C-y, तो Ctrl+ Alt+ दबाएं Y

यह जाँचने के लिए कि आपके वर्तमान बाइंडिंग क्या हैं, xevप्रोग्राम को टर्मिनल में शुरू करें । Xev विंडो केंद्रित होने के साथ, चाबियाँ दबाएं; आप टर्मिनल में उत्पन्न घटनाओं की एक प्रतिलेख देखेंगे।

टर्मिनल एमुलेटर (या भौतिक टर्मिनलों के अनुरूप टर्मिनल डिवाइस) और अनुप्रयोगों के बीच संचार वर्णों का उपयोग करता है। जब आप दबाते हैं A, तो टर्मिनल " Aकुंजी, कोई संशोधक" जानकारी प्राप्त करता है , लेकिन यह टर्मिनल में चल रहे एप्लिकेशन को जो भेजता है वह चरित्र है a। जब आप किसी फ़ंक्शन कुंजी को दबाते हैं जैसे Upया F1, कोई समान वर्ण नहीं है; टर्मिनल एक चरित्र अनुक्रम को एस्केप चरित्र (बाइट 27, कभी-कभी लिखित \eया ^[) के साथ शुरू करता है। जब एक टर्मिनल एमुलेटर जैसे xterm को Metaसंशोधक के साथ एक महत्वपूर्ण प्रेस ईवेंट प्राप्त होता है , तो यह कुंजी को एक एस्केप कैरेक्टर के लिए ट्रांसलेट करता है, जिसके बाद कुंजी का अंतर्निहित फंक्शन, जैसे \ea(एस्केप, लोअरकेस) प्रेस करते समय Meta+ दबाते हैं A

'टर्मिनल', 'शेल', 'ट्टी' और 'कंसोल' के बीच सटीक अंतर क्या है? उपयोगी पृष्ठभूमि हो सकती है।


5

प्रमुख घटना एक्स सर्वर (जैसा कि कॉन्फ़िगर किया गया है xmodmap) द्वारा उत्पन्न की जाती है , और आपके एक्स एप्लिकेशन को भेज दी जाती है। आपके विंडो प्रबंधक इसे xterm को भेजे जाने से पहले रोक सकते हैं। XTerm, बदले में, घटना को कुछ बाइट्स में अनुवाद करता है और आपके शेल, बैश द्वारा आवंटित छद्म-ट्टी को बाइट भेजता है।

कृपया ध्यान दें कि सभी घटनाओं को एक्सटर्म द्वारा सीधे बाइट्स में अनुवादित नहीं किया जाता है। उदाहरण के लिए, कुंजी Ctrlऔर shiftकुंजियाँ, अपने आप से, X कीबोर्ड ईवेंट उत्पन्न करते हैं, लेकिन XTerm इसके भीतर चल रहे शेल (या अन्य एप्लिकेशन) को कुछ नहीं भेजता है। इसमें Metaकुंजी भी अपने आप शामिल है, लेकिन Menuकुंजी नहीं । हालाँकि, दबाने से उत्पन्न घटना Meta- eXTerm को XTerm.VT100.metaSendsEscape संसाधन सेटिंग के आधार पर या तो बाइट 0xE5 या दो-बाइट अनुक्रम 0x1B 0x65 भेज देगा।


2

बाश की मेटा कुंजी मूल रूप से इस तरह परिभाषित की गई थी ( lib/readline/ChangeLog):

Mon Jul 13 11:34:07 1992  Brian Fox  (bfox@cubit)
        * readline.c: (rl_variable_bind) New variable "meta-flag" if "on"
        means force the use of the 8th bit as Meta bit.  Internal variable
        is called meta_flag.

यह वही होता है जिस तरह से यह ncurses के साथ व्याख्या की जाती है और xterm के । एक कुछ इस सुविधा वैकल्पिक बनाने के लिए प्रदान की टर्मिनल (पहलू बड़े पैमाने पर नहीं था टर्मिनलों में से अधिकांश आप उपयोग hardcoded व्यवहार (और बहुत ही दिलचस्प नहीं) का सामना करेंगे।। Terminfo मैनुअल पृष्ठ दस्तावेजों इन टर्मिनल क्षमताओं:

   has_meta_key              km     km   Has a meta key
                                         (i.e., sets 8th-bit)
   meta_off                  rmm    mo   turn off meta mode
   meta_on                   smm    mm   turn on meta mode
                                         (8th-bit on)

और सुविधा की व्याख्या करता है:

यदि टर्मिनल में "मेटा कुंजी" है जो शिफ्ट कुंजी के रूप में कार्य करता है, तो प्रेषित किसी भी वर्ण के 8 बिट को स्थापित करने के साथ, इस तथ्य के साथ संकेत दिया जा सकता है km। अन्यथा, सॉफ्टवेयर यह मान लेगा कि 8 वीं बिट समता है और यह आमतौर पर साफ हो जाएगी। यदि स्ट्रिंग्स इस "मेटा मोड" को चालू और बंद करने के लिए मौजूद हैं, तो उन्हें इस रूप में smmऔर दिया जा सकता है rmm

एक अलग विशेषता, के जवाब में एक भागने चरित्र उपसर्ग Alt कुंजी के करना कुछ टर्मिनल एमुलेटर में शामिल किया गया था। बैश (वास्तव में readlineपुस्तकालय) दस्तावेज जो 2004 से अपने चैंज में उपयोग करते हैं :

lib/readline/callback.c            
        - use _rl_dispatch_callback and a chain of _rl_keyseq_contexts to
          simulate the recursion used to decode multicharacter key sequences
          (even things like ESC- as meta-prefix

मेटा एक संशोधक कुंजी का एक विशेष मामला है । पसंदcontrol और shift, आप इसे एक और प्रमुख के रूप में एक ही समय में प्रेस और अपने आप कुंजी दबाने से कुछ अलग देखने की उम्मीद। X, कुंजी के लिए X घटना में साथ में संशोधित संशोधक मान में थोड़ा असाइन करके संशोधक कुंजी प्रदान करता है। मुख्य प्रेस कई एक्स इवेंट हो सकते हैं; संशोधक को बनाए रखते हुए X इन घटनाओं के संयोजन के लिए कार्य प्रदान करता है।

X उन सभी कुंजियों के लिए प्रतीकों को भी परिभाषित करता है जो आपके कीबोर्ड पर दिखाई दे सकती हैं। यह फ़ंक्शन को संयोजित करने वाले कार्यों में विशेष हैंडलिंग द्वारा अन्य मानों (जैसे यूनिकोड) के लिए प्रदान करता है।

लेकिन "मेटा" एक विशेष मामला है।

metaकन्वेंशन को छोड़कर एक्स एप्लिकेशन की कोई कुंजी नहीं है । X में मेटा की, या मेटा मॉडिफ़ायर की परिभाषा नहीं है। पारंपरिक रूप से, टर्मिनलों को Alt-की और / या ज्ञात मॉडिफायर में से एक के लिए देखा जाता है xmodmap, जैसे mod2। बाद में xkb सुविधा चीजों को जटिल करती है (लेकिन इस चर्चा के सापेक्ष कोई सुधार नहीं प्रदान करती है) Altकुंजी खोजने के लिए जानकारी की एक और परत प्रदान करके ।

निश्चित रूप से कन्वेंशन ले जा सकते हैं आप केवल अब तक, यह देखते हुए कि न तो xmodmapहै और न ही xkbके बारे में विशेष रूप से कुछ भी पता मेटा । उदाहरण के लिए, xterm कॉन्फ़िगर करने योग्य है, और सभी उपयोगकर्ता उसी तरह मेटा को कॉन्फ़िगर नहीं करना चाहते हैं । उदाहरण के लिए, Altयदि यह translationसंसाधन में उपयोग किया जाता है, उदाहरण के लिए, मेटा-कुंजी नहीं हो सकती है । एक अन्य कुंजी मेटा कुंजी हो सकती है, लेकिन उपयोगकर्ता (विशेष रूप से जो बाश में एस्केप अनुक्रमों का उपयोग करते हैं) वे प्रेस करते समय भेजा गया एक भागने चरित्र चाहते हो सकते हैं Alt। लेकिन ध्यान रखें कि जब तक यह एक संशोधक के रूप में कॉन्फ़िगर नहीं किया जाता है कोई नहीं होता है: xterm घटनाओं को अपने आप से संयोजित नहीं करता है।

xterm में कई संसाधन सेटिंग्स हैं ( मैनुअल पेज में प्रलेखित ):

  • altIsNotMetaऔर altSendsEscape( 2007 में जोड़ा गया )।
  • eightBitInput2006 के बाद से मेटा मोड की मूल भावना से मेल खाती है, और इस के लिए परिभाषित एक भागने अनुक्रम है जो ( smmऔर rmmमेटा मोड को सेट / हटाने) टर्मिनल क्षमताओं प्रदान करता है।
  • eightBitInputयूटीएफ -8 को कच्चे इनपुट बाइट्स के बजाय 128 द्वारा डिकोड किए गए यूनिकोड मूल्यों को स्थानांतरित करके खाते में लेने के लिए 2003 में संशोधित किया गया था ।
  • metaSendsEscape1999 से तारीखें
  • eightBitInputकी तुलना में बहुत पुराना है metaSendsEscape। इसने मेटा मोड (आठवीं बिट को जोड़ने) या escapeX11R4 (1989) के साथ एक कुंजी को प्रीफ़िक्स करने के बीच एक विकल्प लागू किया है । लेकिन यह सुविधा स्टार्टअप पर निर्धारित की गई थी: यह निर्धारित करने के लिए कि क्या 8 बिट या केवल 7 को इनपुट करने के लिए सेट किया गया था, यह आरंभीकरण के दौरान जांचा गया था। उसके बाद, यह नहीं बदला।

कुछ लोग उत्तरार्द्ध को मेटा मोड के रूप में संदर्भित करते हुए दो ( 8-बिट और भागने-उपसर्ग) की बराबरी करते हैं । मामले पर आपके दृष्टिकोण के आधार पर, xterm की संसाधन सेटिंग कार्यशील मेटा-कुंजी प्राप्त करने के लिए समाधान का हिस्सा है।eightBitInput

आगे की पढाई:

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