2012-05-18 11 views
5

यह है अभिव्यक्ति मेरी .emacs फ़ाइल वांछित परिणाम का उत्पादन नहीं करता में:मैं emacs में सी- = कैसे बांधूं?

(define-key global-map (kbd "C-=") 'djhaskin987-untab-to-tab-stop) 

मैं क्यों Ctrl += के लिए एक आदेश के लिए बाध्य नहीं कर सकते? स्पष्टीकरण के लिए

संपादित:

मैं डेबियन के लिए urxvt-256colors के मानक निर्माण पर emacs23-nox उपयोग कर रहा हूँ, कि मैं के साथ --disable-iso405776 (या उस प्रभाव के लिए कुछ) कंपाइल है सिवाय इसके कि इसे इतना है कि Ctrl +शिफ्ट अजीब 'सम्मिलित चरित्र' चीज़ नहीं करता है। मुझे नहीं पता कि यह कुछ भी प्रभावित करता है या नहीं। उदाहरण के लिए, सी-एम-आईएम-टीएबी भेजता है, जो मुझे समझ में नहीं आता है।

संपादित द्वितीय:

मैं इस स्पष्ट नहीं बनाने के लिए हमें खेद है। फ़ंक्शन djhaskin987-untab-to-tab-stop में (interactive) है। यह हिस्सा काम करता है।

+1

सी-मुझे आमतौर पर emacs में 'TAB' के रूप में अनुवादित किया जाता है। इसलिए मुझे आश्चर्य नहीं होगा कि 'सी-एम-आई' का अनुवाद 'एम-टैब' – kindahero

उत्तर

6

एक टर्मिनल में, टैब रूप सी-मैं एक ही बाइट क्रम का प्रतिनिधित्व करती है। और आम तौर पर टर्मिनल के पास सी- = के लिए कोई विशेष बाइट-अनुक्रम नहीं है, इसलिए यह केवल = भेजेगा। ऐसा कुछ भी नहीं है जो Emacs इसके बारे में कर सकते हैं। लेकिन आप अपने टर्मिनल एमुलेटर को अपनी पसंद के कुछ विशेष बाइट अनुक्रम भेजने के लिए सिखा सकते हैं (इसके लिए अपने टर्मिनल एमुलेटर के दस्तावेज़ीकरण की जांच करें), जिसके बाद आप एमाक्स को सी- = (कुछ के साथ) के रूप में पहचानने के लिए सिखा सकते हैं (define-key input-decode-map "...thebytes..." [?\C-=]) की तरह)।

+1

धन्यवाद स्टीफन .. यह बहुत उपयोगी है .. eg..in के लिए इस पैकेज में कुछ लोगों ने xterm emacs के साथ बेहतर काम करने के लिए बहुत दर्द किया। http://www.dur.ac.uk/p.j.heslin/Software/Emacs/Download/xterm-extras.el (.Xresource फ़ाइल के लिए टिप्पणी देखें) – kindahero

+0

+1 मेरी समस्या को हल करने में मेरी सहायता करने के लिए धन्यवाद। मैं देख सकता हूं कि यह रास्ता है। – djhaskin987

+0

शायद वास्तविक समाधान में संपादित करना बेहतर है - लिंक की गई फ़ाइल संपीड़ित के माध्यम से आती है और लिंक आसानी से टूट सकता है। टर्मिनलों में 'सी- = 'विशेष है? सामान्य रणनीति एक्स कुंजी का उपयोग अप्रयुक्त टर्मिनल एस्केप अनुक्रमों में अनुवाद करने के लिए होती है और फिर इन और अन्य पूर्व-अनिर्धारित टर्मिनल से बचने के लिए emacs कुंजी को परिभाषित करती है (और तब उन कुंजी को कार्यों में बाध्य करती है)। –

0

जो फ़ंक्शन आप बाध्यकारी कर रहे हैं वह इंटरैक्टिव होना चाहिए। प्रयास करें:

(define-key global-map (kbd "C-=") 
    (lambda() (interactive) (djhaskin987-untab-to-tab-stop))) 
+0

के रूप में किया गया है, मुझे डर नहीं है, लेकिन टिप के लिए धन्यवाद। जब मैं इस लाइन (या मेरा) का उपयोग करता हूं और CTRL + = दबाता हूं, तो यह केवल बफर में '=' ​​लिखता है। – djhaskin987

1

समस्या यह है कि आप टर्मिनल में Emacs का उपयोग करें। टर्मिनल "सी- =" की अनुमति नहीं देता है। ग्राफिकल emacs में अपने फ़ंक्शन का प्रयास करें और यह काम करेगा। आपको टर्मिनल के लिए एक और कीबाइंडिंग खोजनी होगी।

+1

मुझे यह एहसास है, लेकिन निजी वरीयता के प्रयोजनों के लिए (ताकि मैं एसएसएच के माध्यम से भी एमएसी एक्सेस कर सकूं, और इसलिए कि मेरी सारी चीजें टर्मिनल में हों), मैं टर्मिनल में भी सी-= काम करना चाहता हूं। – djhaskin987

5

link in the first comment to it के साथ संयोजन में स्वीकृत उत्तर एक पूर्ण समाधान पर शुरू करने के लिए पर्याप्त है। कदम हैं:

  1. के लिए महत्वपूर्ण
  2. Emacs एक विधा नक्शा

पहले में एक मानक कुंजी दबाने के रूप में पहचान मुक्ति कोड

  • बाँध कुंजी दबाने बनाने के अपने टर्मिनल उत्पादन मुक्ति कोड बनाने के बहुत टर्मिनल और/या ऑपरेटिंग सिस्टम निर्भर है।

    पहली टिप्पणी में लिंक एक्स विंडो सिस्टम के लिए कुछ उदाहरण दिखाता है। मुख्य नाम /usr/X11R6/include/X11/keysymdef.h में उपलब्ध हैं (या locate keysymdef.h आज़माएं), XK_ के साथ उपसर्ग (जिसे हमारे उद्देश्यों के लिए हटाया जाना चाहिए)।मैंने पढ़ा कि प्रतीकात्मक नामों को प्रमुख अक्षर पर प्राथमिकता दी जाती है।

    मैं वर्तमान में प्रदर्शित नहीं होते एक्स लेकिन मुझे लगता है कि आपके मामले में इस तरह दिखना चाहिए:

    XTerm.VT100.Translations: #override \ 
    Ctrl ~Meta ~Shift <Key> equal:   string(0x1b) string("[emacs-C-=")\n 
    

    पहली स्ट्रिंग, भागने है दूसरा आपके द्वारा चुनी गई है।

    iTerm में आप Preferences->Keys का उपयोग कर सकते हैं और Action के रूप में Send Escape Sequence का चयन कर सकते हैं। उदाहरण के लिए, मेरे पास है: अन्य टर्मिनलों के लिए

    iTerm key mappings

    Emacs विकी lists some configuration methods

    अब आप Emacs को इसे सी- = के रूप में पहचानने के लिए सिखा सकते हैं। पहले define-keyinput-decode-map में। स्ट्रिंग में भागने, C-\. तरह की आवश्यकता होगी

    (defun my/global-map-and-set-key (key command &optional prefix suffix) 
        "`my/map-key' KEY then `global-set-key' KEY with COMMAND. 
    PREFIX or SUFFIX can wrap the key when passing to `global-set-key'." 
        (my/map-key key) 
        (global-set-key (kbd (concat prefix key suffix)) command)) 
    
    (defun my/map-key (key) 
        "Map KEY from escape sequence \"\e[emacs-KEY\." 
        (define-key function-key-map (concat "\e[emacs-" key) (kbd key))) 
    

    तो फिर::

    (my/global-map-and-set-key "C-=" 'some-function-to-bind-to) 
    

    कुछ कुंजियों (()\|;'`"#., वर्तमान में) मैं सहायक कार्यों की एक जोड़ी है।

  • संबंधित मुद्दे