2011-02-03 13 views
11

मैं एक एमाक्स उपयोगकर्ता हूं जिसमें संपादक को कॉन्फ़िगर करने के संबंध में कोई कौशल नहीं है।हैकेल-इंडेंट-मोड को हैकेल-इंडेंटेशन मोड पर हैकेल-मोड 2.7 में हैकेल-इंडेंटेशन-मोड पर मजबूर करना?

  • इंडेंटेशन मैं काफी पसंद नहीं है एक तरह से अलग किसी भी तरह है,: मैं 2.7 करने के लिए haskell-mode 2.4 से अपग्रेड के बाद, मैं दो परिवर्तन देखा है। मैं अपनी अंगुली को जो कुछ भी कर रहा हूं उस पर काफी नहीं डाल सकता।
  • अधिक महत्वपूर्ण बात: यदि मेरे पास कुआ-मोड सक्षम है और टेक्स्ट के ब्लॉक को हाइलाइट करता है, तो बैकस्पेस/डिलीट पूरे ब्लॉक को हटाता है, बस मेरे मार्कर से पिछले/अगले अक्षर को हटा देता है।

मुझे लगता है कि Haskell मोड 2.7, डिफ़ॉल्ट रूप से नाबालिग मोड Haskell-खरोज मोड का उपयोग करता है, जबकि 2.4 के व्यवहार Haskell-इंडेंट-मोड के रूप में संरक्षित किया गया है देखते हैं। यदि मैं पहले पूर्व को बंद कर देता हूं, और उसके बाद के बाद, जिस व्यवहार को मैं चाहता हूं उसे पुनर्स्थापित किया जाता है (यानी इंडेंटेशन पहले जैसा लगता है, और बैकस्पेस/डिलीट हाइलाइट किए गए ब्लॉक हटाएं)।

हालांकि, जब भी मैं एक .hs प्रत्यय के साथ फ़ाइल खोलता हूं, तो यह स्वचालित रूप से ऐसा नहीं हो सकता है। मैं

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent-mode) 

जैसी विभिन्न चीजों और यह की पसंद की कोशिश की है, लेकिन मैं या तो मानक मोड के साथ या मांगपत्र करें और डॉक के बिना सादे Haskell-मोड के साथ अंत।

कोई विचार?

समाधान (धन्यवाद nominolo करने के लिए):

(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 

(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 

    ;; further customisations go here. For example: 
    (setq locale-coding-system 'utf-8) 
    (flyspell-prog-mode) ;; spell-checking in comments and strings 
    ;; etc.  

    ) 

तुम भी वहाँ में एक गुमनाम समारोह छड़ी सकता है:

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indent) 
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 
(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 
    ) 

उत्तर

14

ऐसी बातें कॉन्फ़िगर करने के लिए सबसे अच्छा तरीका है एक कस्टम हुक लिख कर है , लेकिन यदि आप कुछ सेटिंग्स के साथ प्रयोग करना चाहते हैं तो नामित फ़ंक्शन रखना आसान है। फ़ंक्शन को फिर से परिभाषित करना (और एक हास्केल फ़ाइल को फिर से खोलना) आपको नया व्यवहार देगा।

+0

ग्रेट उत्तर; यह यादृच्छिक 'ऐड-हुक' के पैटर्न से पहले काफी बेहतर था। धन्यवाद! – acfoltzer

+0

अफसोस की बात है, यह मेरे लिए मदद नहीं करता है। मैं आपके .emacs को दिया गया कोड जोड़ता हूं, लेकिन जब मैं एक .hs हैकेल-इंडेंटेशन-मोड खोलता हूं तब भी चालू है। 'एम-एक्स हैकेल-इंडेंटेशन-मोड' चलाना इसे अपेक्षित रूप से बंद कर देता है। – gspr

+0

@gspr: यह हो सकता है कि आपके पास एक और हुक चल रहा हो। सक्रिय हुक देखने के लिए 'सी-एच वी हैकेल-मोड-हुक' का प्रयोग करें। वैकल्पिक रूप से, ऐसा लगता है कि वास्तव में तीन इंडेंटेशन मोड हैं, तो शायद आपको एक और मोड बंद करना होगा? – nominolo

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