में Shift + ऊपर एक टर्मिनल में Emacs द्वारा मान्यता प्राप्त नहीं है मैं, यह बताएं कि टर्मिनलों भागने दृश्यों में सबसे फ़ंक्शन कुंजियों का अनुवाद क्योंकि अनुप्रयोगों और टर्मिनलों संचारित वर्ण (या बल्कि बाइट्स), नहीं चाबियाँ के बीच इंटरफेस। केवल कुछ संशोधक + वर्ण संयोजनों का अपना चरित्र होता है:
- Ctrlप्लस एक पत्र या
@[\]^_
बाइट्स 031 (ASCII नियंत्रण वर्ण ) में बदल जाता है ।
- अक्सर Ctrl+ ?बाइट 127 में बदल जाता है और Ctrl+ + (बाइट 0) के Spaceबराबर होता है ।Ctrl@
- कुछ फ़ंक्शन कुंजियाँ नियंत्रण वर्णों के बराबर होती हैं: Tab= Ctrl+ I, Return= Ctrl+ M, Esc= Ctrl+ [।
- और Backspace= Ctrl+ Hया Ctrl+ ?विन्यास पर निर्भर करता है। Emacs के लिए Ctrl+ ?अधिक सुविधाजनक है, क्योंकि Ctrl+ Hसहायता है।
- Meta+ चरित्र के अनुसार characterभेजा जाता है ।Esc
तो इस तरह के रूप अन्य संयोजन के बारे में क्या Ctrl+ ;या Ctrl+ Shift+ letter? चूँकि कोई समान वर्ण नहीं है, इसलिए टर्मिनल को किसी वर्ण का पुन: उपयोग करना पड़ता है या भागने का क्रम भेजना पड़ता है। कई टर्मिनल ऐसे मॉडिफायर्स को नजरअंदाज करते हैं, जब कोई अनुरूप चरित्र नहीं होता है, तो आप अंत में Ctrl+ ;भेजने ;
, Ctrl+ Shift+ के letterबराबर Ctrl+ letterआदि के साथ समाप्त होते हैं ।
टर्मिनल विक्रेता लंबे समय तक साधारण काम करते रहे। एस्केप सीक्वेंस के लिए कोई मानक नहीं था, जो स्वयं-स्थायी था - टर्मिनल विक्रेताओं ने इसे लागू नहीं किया, अनुप्रयोग इसका समर्थन नहीं करते हैं, उपयोगकर्ताओं को यह उम्मीद है। कुछ टर्मिनल एमुलेटर को मनमाने ढंग से भागने के अनुक्रम भेजने के लिए कॉन्फ़िगर किया जा सकता है, इसलिए यदि आपका हो सकता है, तो आप इसे कॉन्फ़िगर कर सकते हैं और भागने के अनुक्रम को एमएसीएस (इस पर बाद में) घोषित कर सकते हैं।
हाल ही में, स्थिति बदल रही है, क्योंकि भागने के दृश्यों पर मानकीकरण के लिए दो प्रस्ताव आए हैं। एक सिंटैक्स के साथ लियोनेर्ड का लिबटरमेक है । एक और वाक्यविन्यास के साथ थॉमस डिकी का एक्सटर्म है । संसाधन सेट करके xterm (16216) के वर्तमान संस्करणों को सिंटैक्स के लिए कॉन्फ़िगर किया जा सकता है ; गैर-मूल्य पर सेट करके सुविधा को सक्रिय किया जाना चाहिए ।ESC [ codepoint ; modifier u
ESC [ 2 7 ; modifier ; codepoint ~
formatOtherKeys
modifyOtherKeys
यदि आपका टर्मिनल एमुलेटर इन सिंटैक्स का समर्थन नहीं करता है, लेकिन कॉन्फ़िगर किया जा सकता है, तो या तो चुनें।
24.4 Emacs के बाद से, Emacs स्वचालित रूप से उस modifyOtherKeys
सुविधा को चालू करता है जब यह पता लगाता है कि टर्मिनल xterm संस्करण .4216 है। चर के माध्यम से कुंजी को एनकोड करने के लिए एस्केप सीक्वेंस का एमएसीएस का पता लगाना local-function-key-map
। 24.4 Emacs के रूप में, सभी एस्केप सीक्वेंस समर्थित नहीं हैं। आप कार्य को पूरा करने के लिए अपनी इनिट फ़ाइल में निम्न कोड का उपयोग कर सकते हैं।
;; xterm with the resource ?.VT100.modifyOtherKeys: 1
;; GNU Emacs >=24.4 sets xterm in this mode and define
;; some of the escape sequences but not all of them.
(defun character-apply-modifiers (c &rest modifiers)
"Apply modifiers to the character C.
MODIFIERS must be a list of symbols amongst (meta control shift).
Return an event vector."
(if (memq 'control modifiers) (setq c (if (or (and (<= ?@ c) (<= c ?_))
(and (<= ?a c) (<= c ?z)))
(logand c ?\x1f)
(logior (lsh 1 26) c))))
(if (memq 'meta modifiers) (setq c (logior (lsh 1 27) c)))
(if (memq 'shift modifiers) (setq c (logior (lsh 1 25) c)))
(vector c))
(defun my-eval-after-load-xterm ()
(when (and (boundp 'xterm-extra-capabilities) (boundp 'xterm-function-map))
(let ((c 32))
(while (<= c 126)
(mapc (lambda (x)
(define-key xterm-function-map (format (car x) c)
(apply 'character-apply-modifiers c (cdr x))))
'(;; with ?.VT100.formatOtherKeys: 0
("\e\[27;3;%d~" meta)
("\e\[27;5;%d~" control)
("\e\[27;6;%d~" control shift)
("\e\[27;7;%d~" control meta)
("\e\[27;8;%d~" control meta shift)
;; with ?.VT100.formatOtherKeys: 1
("\e\[%d;3u" meta)
("\e\[%d;5u" control)
("\e\[%d;6u" control shift)
("\e\[%d;7u" control meta)
("\e\[%d;8u" control meta shift)))
(setq c (1+ c))))))
(eval-after-load "xterm" '(my-eval-after-load-xterm))
यदि TERM
पर्यावरण चर xterm
या वैरिएंट जैसे सेट नहीं है xterm-256color
, तो Emacs उन अनुक्रमों को सक्रिय नहीं करेगा। यदि Emacs के पास पहले से ही आपके मूल्य के लिए समर्थन है TERM
, तो आप Lisp फ़ाइलTERM
को लोड करने के बाद क्रियान्वित किया जा सकता है, जिसका नाम Lisp फ़ाइल लोड करने के बाद है । Emacs ऐसी कोई समर्थन हासिल है, तो आप इसे उप-निर्देशिका कहा जाता है बनाने के द्वारा जोड़ सकते हैं term
अपने में कहीं load-path
, और कहा जाता है एक लिस्प फ़ाइल बनाने term/$TERM.el
जहां $TERM
का मूल्य है TERM
, एक समारोह में कहा जाता को परिभाषित terminal-init-$TERM
।
जैसा कि मैं लिखता हूं, ऐसा लगता है कि xterm के अलावा कुछ टर्मिनल एमुलेटर ने इन एस्केप सीक्वेंस को अपनाया है। OSX पर, आप प्रत्येक कुंजी संयोजन के लिए एक, एक-एक करके भागने के क्रम का चयन करके iTerm2 को कॉन्फ़िगर कर सकते हैं ।
C-;
कॉम्बो का उपयोग करने का प्रयास करें और फिरM-x view-lossage
यह देखने के लिए उपयोग करें कि क्या यह Emacs के लिए भी हो रहा है।