एक टर्मिनल में Emacs द्वारा Shift + Up को मान्यता नहीं दी गई है


15

बहुत बार मैं Emacs में एक क्षेत्र का चयन करने के लिए Shift+ Up/Downका उपयोग करता हूं । यह GUI मोड में ठीक काम करता है, लेकिन जब विकल्प के emacsसाथ इनवाइट किया जाता -nwहै तो मैं केवल Shift+ के साथ लाइनों का चयन कर सकता हूं DownShift+ Upकाम नहीं, मैं minibuffer में यह त्रुटि संदेश मिलता है:

<select> is undefined

कैसे मैं इस मुद्दे को हल कर सकता हूँ?

जवाबों:


13

एक पाठ टर्मिनल केवल वर्णों को प्रसारित करता है (अधिक सटीक, बाइट्स), चाबियाँ नहीं। कुंजी और कीचर्ड (संशोधक के साथ कुंजियाँ) को वर्ण क्रम के रूप में एन्कोड किया गया है। मुद्रण योग्य वर्ण डालने वाली कुंजियाँ स्वयं के रूप में भेजी जाती हैं; फंक्शन कीज को एस्केप सीक्वेंस के रूप में भेजा जाता है। अधिकांश एस्केप सीक्वेंस में चरित्र से बच ( ?\eEmacs सिंटैक्स में) दो या दो से अधिक मुद्रण योग्य वर्ण होते हैं। देखें नियंत्रण और ऊपर / कुंजियों को उपयोग के लिए टर्मिनल में Emacs द्वारा और कैसे कुंजीपटल इनपुट और पाठ उत्पादन कार्य करते हैं? अधिक जानकारी के लिए।

Emacs के पास अपनी खुद की चाबियों की धारणा में से बच दृश्यों का अनुवाद करने के लिए एक तंत्र हैinput-decode-mapजब Emacs शुरू होता है (या अधिक सटीक रूप से, जब एक नया फ्रेम खुला होता है: अनुवाद तालिका आरंभिक होती है: इस चर का प्रत्येक टर्मिनल पर एक अलग मूल्य होता है)। कभी-कभी Emacs टर्मिनल द्वारा भेजे गए सभी एस्केप सीक्वेंस को नहीं जानते हैं।

आपके मामले में, ऐसा प्रतीत होता है कि Emacs के पास Shift+ द्वारा भेजे गए एस्केप अनुक्रम के लिए गलत व्याख्या है Up। आपको इसे बताने की ज़रूरत है S-upबजाय इसके कि इसकी व्याख्या की जाए select। सबसे पहले, यह पता लगाएं कि भागने का क्रम क्या है। में *scratch*बफर, प्रेस Ctrl+ Qतो Shift+ Up। कमांड C-qअगले चरित्र का कारण बनता है, जो कि भागने का पात्र है, जिसे शाब्दिक रूप से सम्मिलित किया जाना है, इसके बाद बाकी बचता क्रम है। मान लीजिए कि Shift+ हमारे सिस्टम पर Upभेजता \e[1;2Aहै, तो आपको निम्नलिखित प्रविष्टि को फिर से परिभाषित करना होगा input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

सिद्धांत रूप में, input-decode-mapप्रति टर्मिनल निर्धारित किया जाना चाहिए। व्यवहार में, दो टर्मिनलों का होना बहुत दुर्लभ है, जिसमें एक ही भागने का क्रम अलग-अलग कुंजियों को कूट देता है, इसलिए एक वैश्विक सेटिंग ठीक काम करेगी।


आपका उत्तर मेरे प्रश्न का उत्तर देने में लगता है - emacs.stackexchange.com/questions/33988Are the (define-key ...)init.el में जाने की आज्ञा देता है? क्या कोई विस्तृत उदाहरण है जो मैं देख सकता हूँ?
vfclists

@vfclists define-keyकमांड आपके इनिट फ़ाइल में जाती हैं। वह ~/.emacs.d/init.elया अन्य स्थानों का एक जोड़ा हो सकता है । आपको खोज के उपयोग के बहुत सारे उदाहरण मिलेंगे , लेकिन यह जानने के define-keyलिए define-keyकि कौन से मानचित्र को बांधना एक और मामला है। कई नक्शे शामिल हैं: global-map, input-decode-map, function-key-map, keyboard-translate-map। मुझे नहीं पता कि मैं आपके सवाल का जवाब कैसे दूं क्योंकि मैं स्पेसमैक्स नहीं जानता। मैं Spacemacs जैसे पैकेजों के उपयोग की अनुशंसा नहीं करता, जो गड़बड़ रूप से मानक इंटरफेस को फिर से परिभाषित करते हैं।
गिल्स एसओ- बुराई को रोकना '

मैंने ओआरजी-मोड सीखने के लिए नियमित रूप से emacs पर स्विच किया है और मैंने input-decode-mapकुछ उदाहरण ढूंढने के साथ काम करने में कामयाब रहा । क्या मैं इसे ले सकता हूं input-decode-mapजब उपयोगकर्ता एक बफर में पाठ दर्ज कर रहा है ?
vfclists

@vfclists input-decode-mapलागू होने वाले कीमैप में से एक है। देखें मैनुअल जानकारी के लिए।
गाइल्स का SO- बुराई पर रोक '

5

Emacs में, क्षेत्र बिंदु (कर्सर) और चिह्न (कर्सर की कुछ पिछली स्थिति, जिसे "चिह्नित" किया गया है) द्वारा सीमांकित किया गया है।

इस प्रकार, "एक क्षेत्र का चयन करने के लिए", आपको उस चिह्न को लगाने की आवश्यकता है, फिर अपनी बात को चारों ओर ले जाएं।

निशान लगाने का सबसे आसान तरीका प्रेस करना है C-SPC। फिर बस कर्सर को इधर-उधर करें, आपको "क्षेत्र" विस्तार दिखाई देगा जैसा कि आप करते हैं।

"क्षेत्र को अचयनित" करने के लिए, आप C-SPCफिर से दबा सकते हैं ।

चूंकि "शिफ्ट + मूवमेंट" अन्य सॉफ़्टवेयर में एक सामान्य कीबाइंडिंग है, डिफ़ॉल्ट रूप से, यह "सिलेक्टेड रीजन" व्यवहार का अनुकरण करता है। हालाँकि, यह टर्मिनल में काम नहीं करता है, क्योंकि बदलाव को एक संशोधक कुंजी के रूप में emacs पर नहीं भेजा जा सकता है।

ध्यान दें कि आम तौर पर, C-SPCक्षेत्र चुनने के लिए अन्य विधियों की तुलना में विधि अधिक शक्तिशाली है: आप आंदोलन के लिए ऊपर / नीचे / बाएं / दाएं तक सीमित नहीं हैं (आप उदाहरण के लिए खोज का उपयोग कर सकते हैं ...), और इसकी आवश्यकता नहीं है कि आप एक लंबे समय के लिए एक असहज कुंजी संयोजन बनाए रखें।

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