क्या कोई भी लिनक्स टर्मिनल है जो सभी प्रमुख संयोजनों को संभाल सकता है?


11

मैं टर्मिनल मोड ( -nw) में emacs का उपयोग करना पसंद करता हूं , लेकिन यह सबसे अधिक लगता है (सभी?) टर्मिनल कुछ प्रमुख संयोजनों को संभाल नहीं सकते हैं - उदाहरण के लिए, C-<RET>या C-M-%। मुझे पता है कि यह इसलिए है क्योंकि अधिकांश टर्मिनल VT-100 का अनुकरण करते हैं, जिसमें ये संयोजन नहीं थे। क्या कोई लिनक्स टर्मिनल (अधिमानतः केडीई) है जो इन प्रमुख संयोजनों को संभाल सकता है, या यह सभी टर्मिनलों की एक मौलिक सीमा है?

जवाबों:


15

जब आप किसी कुंजी या कुंजी संयोजन को टर्मिनल में दबाते हैं, तो यह टर्मिनल में चल रहे एप्लिकेशन को एक या अधिक वर्णों के अनुक्रम के रूप में प्रेषित होता है। उदाहरण के लिए, जब आप दबाते हैं a, तो आवेदन प्राप्त होता है a। जब आप दबाते हैं Enter, तो एप्लिकेशन को चरित्र CR(उर्फ ^M"कंट्रोल-एमएम"), उर्फ ​​चरित्र संख्या 13, उर्फ \r( \015) प्राप्त होता है। इसमें शामिल होने वाले मुख्य संयोजनों को Altआम तौर पर चरित्र ESC( ^[aka। Aka \eor \033) के रूप में प्रसारित किया जाता है और उसके बाद बिना कुंजी या कुंजी संयोजन के अनुक्रम के लिए Alt। समारोह चाबियाँ और अन्य कुंजी संयोजन के साथ शुरुआत से बच दृश्यों के रूप में प्रसारित कर रहे हैं \e[या \eO

एस्केप सीक्वेंस पूरी तरह से मानकीकृत नहीं हैं, और टर्मिनल आमतौर पर कुछ कुंजियों के लिए कुछ विशेषताओं को अनदेखा करते हैं। उदाहरण के लिए, Ctrl+ Shift+ letterअक्सर डिफ़ॉल्ट रूप से Ctrl+ जैसा प्रेषित होता है letter

आप अपने टर्मिनल से दबाने से कुंजी संयोजन के लिए भेजता है क्या देख सकते हैं Ctrl+ Vएक खोल में है कि कुंजी संयोजन के बाद शीघ्र, या C-qया C-h cEmacs में कुंजी संयोजन के द्वारा पीछा किया।

कुछ टर्मिनल एमुलेटर के साथ, आप प्रत्येक कुंजी के लिए एस्केप अनुक्रम कॉन्फ़िगर कर सकते हैं। Xterm पर, यह X संसाधनों के माध्यम से किया जाता है । अधिकांश सेटअप ~/.Xresourcesएक्स शुरू होने से संसाधन पढ़ते हैं , और आप फ़ाइल को मैन्युअल रूप से लोड कर सकते हैं xrdb -merge ~/.Xresources

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <key>percent: string("\033[37;6~")

एक आम सम्मेलन ESC [ number1 ; number2 ~संशोधक के साथ फ़ंक्शन कुंजियों के लिए फ़ॉर्म के एस्केप अनुक्रम का उपयोग करता है । number1इंगित करता है फ़ंक्शन कुंजी ( 15करने 24के लिए F5करने के लिए F12- ऐतिहासिक कारणों के लिए, एफ 1 के माध्यम से F4विभिन्न भागने दृश्यों है) और number2संशोधक संकेत करता है ( 2के लिए Shift, 3के लिए Meta, 5के लिए Ctrl, 7के लिए Ctrl+ Metaऔर 1 जोड़ने Shiftके कम से कम एक साथ Ctrlया Meta)।

Emacs के माध्यम से अपनी आंतरिक कुंजी प्रतिनिधित्व में भागने दृश्यों तब्दील हो input-decode-mapयाlocal-function-key-map (या function-key-mapEmacs 23 से पहले)।

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

इसलिए, अगर मैं इसे सही ढंग से समझता हूं, तो मुझे सबसे पहले अपने टर्मिनल में एक एस्केप सीक्वेंस को परिभाषित करने की जरूरत है, जो कुछ प्रमुख संयोजन से मेल खाता है। फिर, emacs में, मुझे भागने के क्रम को मुख्य संयोजन पर वापस करने की आवश्यकता है। क्या भागने का क्रम मनमाना हो सकता है, जब तक कि इसमें परिभाषित लोगों के साथ संघर्ष नहीं होता है infocmp $TERM?
Yossarian

2
@Yossarian हाँ। परस्पर विरोधी न होने के अलावा, एस्केप सीक्वेंस को असंदिग्ध होना चाहिए, अर्थात कोई भी एग्जिट सीक्वेंस दूसरे का उपसर्ग नहीं होना चाहिए। व्यवहार में इसका मतलब है कि पहला चरित्र होना चाहिए ESC(जब तक कि आप कुछ चरित्र ,128 की कोशिश नहीं करना चाहते हैं, लेकिन यह संभव इनपुट एनकोडिंग को प्रतिबंधित करेगा) और दूसरा चरित्र कुछ ऐसा होना चाहिए जिसके लिए आप कोई ESC fooबंधन नहीं चाहते हैं ।
गिल्स एसओ- बुराई को रोकें '

आपने जो सुझाव दिया है, उसे आजमाने के लिए मैं अभी-अभी आया हूं। चाहिए local-set-keyवास्तव में हो सकता है define-key? पूर्व एक त्रुटि देता है (तर्कों की गलत संख्या), जबकि बाद वाला काम करता है, कम से कम <kbd> C-Enter </ kbd> के लिए। ऐसा लगता है कि कोनोलाज़ को अभी भी <kbd> CM -% </ kbd> भेजने में समस्या है।
युसरीन

@Yossarian वास्तव में, यह होना चाहिए define-key। मुझे पता नहीं है कि अगर कोनोन्स की भागने की चाबियाँ कॉन्फ़िगर की जा सकती हैं, तो xterm शायद किसी भी विकल्प की तुलना में अधिक अनुकूलन योग्य है।
गिलेस एसओ- बुराई को रोकना '

1
ध्यान दें कि थॉमस डिक्की का एक्सटर्म सक्रिय विकास के अधीन है। XTerm*modifyOtherKeys: 2संसाधन के साथ यह C-M-संयोजन के लिए भी अद्वितीय अनुक्रम उत्पन्न करेगा , लेकिन उस सेटिंग के साथ आपको बहुत सारे कस्टम मैपिंग प्रदान करने की आवश्यकता होगी ( XTerm*modifyOtherKeys: 1यह बॉक्स के बाहर कम सक्षम है, लेकिन कहीं अधिक कार्यात्मक है)। एक उदाहरण के लिए (जो मेरे लिए काम नहीं करता था) xterm-extras.elपुस्तकालय और संबंधित .Xresourcesऔर .inputrcफ़ाइलों को ई- मेल डाउनलोड में देखें।
फिल्स

1

कुंजी के सीमित, लेकिन महत्वपूर्ण सेट के लिए, केडीई के कंसोल को देखते हुए, व्यक्ति निम्नलिखित कार्य कर सकता है, emacs में जटिल कीबाइंडिंग:

मैं S-<RET>उदाहरण के रूप में काम करने के अपने कार्यान्वयन का उपयोग करूंगा :

  1. एक नया konsole खोलें, सेटिंग्स पर जाएं -> वर्तमान प्रोफ़ाइल -> कीबोर्ड -> संपादित करें
  2. हिट जोड़ें और इसके लिए एक नई प्रविष्टि बनाएं Return+Shiftऔर इसे एक उपयोगी कुंजी अनुक्रम दें (मैंने चुना है \E[27;3जो मुझे लगता है कि एक्स द्वारा भेजा गया प्रमुख अनुक्रम है जब मैं xev के साथ घूम रहा था, लेकिन यह गलत हो सकता है - ऐसा करना महत्वपूर्ण है यकीन है कि यह एक उचित बच गया है और किसी और चीज के साथ संघर्ष नहीं करता है)।
  3. यह सुनिश्चित करें कि यह काम कर रहा है तल पर थोड़ा परीक्षण क्षेत्र में इसके साथ खेलें।
  4. कॉनसोल को पुनरारंभ करें।
  5. प्रारंभ करें emacs -nwऔर खरोंच बफ़र में मूल्यांकन करें:

    (read-key-sequence-vector "Type your new key:")

    फिर अपना नया कुंजी संयोजन टाइप करें।

    • यदि आप इससे अपरिचित हैं, तो लाइन को बाहर लिखें, लाइन के अंत में कर्सर को छोड़ दें, और उस लाइन को चलाने के लिए emacs प्राप्त करने के लिए Cx Ce से टकराएँ, यह आपको उद्धरणों में जो कुछ भी कहते हैं वह आपको कहना चाहिए और आपका इंतजार करना चाहिए कुछ लिखो।
  6. यह एक महत्वपूर्ण अनुक्रम को थूकना चाहिए जिसे आप बांध सकते हैं।
    (इससे पहले कि मैं सांत्वना कीबाइंडिंग के साथ गड़बड़ कर रहा था [27 91 50 55 59 51], उबाऊ पुराने के विपरीत मेरे पास लौट आया [13]।)

  7. अपने emacs कॉन्फ़िगरेशन में जोड़ें:

    (define-key function-key-map [27 91 50 55 59 51] [(shift return)])
    
  8. मैंने emacs -nwएक स्क्रीन सत्र में इसका उपयोग करके परीक्षण किया :

    (define-key ess-mode-map [(shift return)] #'ess-eval-line-and-step)
    (define-key sh-mode-map [(shift return)]  #'send-line-to-shell)
    

0

संक्षिप्त उत्तर यह है कि यह सभी टर्मिनलों की एक मौलिक सीमा है।

थोड़ा लंबा जवाब यह है कि भले ही किसी ने एक ऐसा टर्मिनल बनाया हो जो आप चाहते हैं, Emacs को इस काल्पनिक टर्मिनल के साथ काम करने के लिए बड़े बदलावों की आवश्यकता होगी।


यह emacs के बारे में एक अच्छा बिंदु है, जो मेरे लिए भी नहीं हुआ। मुझे लगता है कि मैं इसके बजाय गुई का उपयोग करना शुरू कर दूंगा।
योशियरी

यही तो मैं करता हूं।
१५:१३ पर १५:३३

0

दोषरहित कीबोर्ड इनपुट (ग्राफिक्स के रूप में अन्य सुविधाओं के बीच) की अनुमति देने के लिए एक तरह से वीटी प्रोटोकॉल का विस्तार करने के कुछ प्रयास हैं।

एक उदाहरण नोट्टी है: https://github.com/withoutboats/notty

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