2012-06-27 17 views
5

मुझे C-j से eval-last-sexp का उपयोग करना पसंद है लेकिन पेरेडिट-मोड (जिसे मैं अन्यथा पसंद करता हूं) paredit-newline पर इसे ओवरराइड करता है। पेरेडिट-मोड डॉक्स में देखकर मुझे paredit-mode-hook जैसी कुछ भी दिखाई नहीं दे रही है, जहां मैं add-hooklocal-set-key या इसी तरह के फ़ंक्शन को कॉल करने के लिए कह सकता हूं।क्या कोई Emacs paredit हुक उपलब्ध है तो मैं सी-जे को फिर से परिभाषित कर सकता हूं?

किसी के पास कोई सुझाव है?

अद्यतन नीचे दो जवाब आज़मा रहे हैं और न ज्यादा सफलता के बाद, मुझे लगता है कि समस्या यह है कि paredit कुछ अलग संदर्भों में लोड हो रहा है से संबंधित हो सकता? बुद्धिमानी के लिए, मैं आम लिस्प, क्लोजर और एमाक्स लिस्प फाइल दोनों खोल रहा हूं, जिनमें से सभी पेरेडिट का उपयोग कर सकते हैं। अफसोस की बात है, eval-last-sexp के विभिन्न रूपों में प्रत्येक मोड में थोड़ा अलग नाम हैं, इसलिए मैं सब कुछ के लिए एक बार कुंजी को परिभाषित नहीं कर सकता। इसके बजाय, मुझे उस प्रमुख मोड के आधार पर कुंजी को बांधना होगा जिसमें मैं भी हूं। उम्मीद है कि एक और उपयोगी डेटा बिंदु जोड़ता है।

उत्तर

10

हुक का उपयोग करने की कोई ज़रूरत नहीं है, तो निम्न की तरह कुछ काम करना चाहिए:

(eval-after-load "paredit" 
    #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp)) 

वैकल्पिक रूप से, किसी कारण वह काम नहीं करता, या के लिए आप बस हुक का इस्तेमाल करते हैं, तो आप इसके बाद के संस्करण में जोड़ सकते हैं define-key प्रमुख मोड के हुक के लिए आमंत्रण जिसके लिए paredit सक्रिय है।

+0

धन्यवाद! इसने एकदम जादू की तरह काम किया। – bitops

6

define-*-mode मैक्रोज़ में से प्रत्येक द्वारा परिभाषित प्रत्येक मोड स्वचालित रूप से संबंधित MODE-hook चलाता है।

मुझे लगता है कि पेरेडिट-मोड (define-minor-mode paredit-mode ...) के साथ परिभाषित मामूली मोड है, और इसलिए यह paredit-mode-hook चलाएगा।

आप एम एक्सfind-functionआरईटीdefine-minor-modeआरईटी टाइप करें और run-hooks के लिए खोज को देखने के लिए जहां इस व्यवहार परिभाषित किया गया है सकते हैं।

संपादित (आधारित अलावा पर सवाल करने के लिए):

वे सब, एक डिफ़ॉल्ट मोड विशेष eval-अंतिम sexp समारोह के लिए बाध्यकारी रूप C-x C-e का उपयोग किसी भी संयोग से है? यही कारण है कि उन्हें करने के लिए के लिए एक सुसंगत बात की तरह प्रतीत होता है, और यदि हां तो आप निम्नलिखित दृष्टिकोण इस्तेमाल कर सकते हैं:

+1

+1। कभी एहसास नहीं हुआ कि Emacs ने इस व्यवहार को स्वचालित किया जब भी हुक चर को प्रश्न में मोड द्वारा स्पष्ट रूप से परिभाषित नहीं किया गया था। –

2

एक paredit मोड हुक नहीं है। जब तक आप इसमें कुछ जोड़ नहीं लेते तब तक आप इसे नहीं देखते हैं। अजीब, लेकिन इस तरह हुक व्यवहार करते हैं।

हालांकि, आपके मामले में, सबसे अच्छा तरीका paredit सी जे के लिए बाध्यकारी स्पष्ट करने के लिए हो सकता है:

(eval-after-load 'paredit 
    #'(define-key paredit-mode-map (kbd "C-j") nil)) 

और फिर सेट अपने के माध्यम से स्वयं के हर प्रमुख मोड हुक में स्थानीय सेट कुंजी।