किसी विशिष्ट फ़ाइल प्रकार की फ़ाइल खोलते समय कमांड चलाएँ


14

जब मैं किसी विशिष्ट फ़ाइल का फ़ाइल खोलता हूं, तो मेरे लिए कुछ कमांड चलाने के लिए एक लिस्प स्क्रिप्ट प्राप्त करने की कोशिश कर रहा हूं। मुझे पता है कि मैं सही init फ़ाइल में काम कर रहा हूं क्योंकि अगर मैं इसमें से थीम हटाता हूं, तो जब मैं इसे शुरू करता हूं तो emacs के पास कोई विषय नहीं होता है।

यह वह स्क्रिप्ट है जिसका मैं उपयोग कर रहा हूं जो काम नहीं करता है (कोई त्रुटि या कुछ भी नहीं):

(defun my-project-hook (filename)
  (when (string= (file-name-extension filename) "ts")
    ((typescript-mode)
     (tss-setup-current-buffer))
  ) 
)

(add-hook 'after-load-functions 'my-project-hook)

इस संदर्भ में, "लोड" का अर्थ "लिस्प कोड के रूप में लोड" है। मुझे लगता है कि आप इसके बजाय फ़ाइल-हुक ढूंढना चाहते हैं (ध्यान दें कि इन्हें एक तर्क के साथ नहीं कहा जाता है! इसके बजाय बफर-फ़ाइल-नाम का उपयोग करें)। आप ऑटो-मोड-एलिस्ट का उपयोग करना और अपने स्वयं के प्रमुख मोड को परिभाषित करना पसंद कर सकते हैं।
यंगफ्रॉग

3
दरअसल, ऐसा लगता है कि आप एक मोड हुक चाहते हैं।
दान

आपने अभी तक इस मुद्दे को नहीं मारा है क्योंकि आपका फ़ंक्शन नहीं चलता है, लेकिन जब आपको पता चलता है कि उपरोक्त वैध लिस्प नहीं है। आपके whenकॉल का मुख्य भाग विकृत है। दो फ़ंक्शन कॉल को कोष्ठक से घिरा नहीं किया जा सकता है जैसे वे हैं। अपने कोड और @ sds के बीच अंतर को ध्यान में रखें
जॉर्डन बियोनडो

जवाबों:


16

Emacs शब्दावली में, ये दो अलग-अलग चरण हैं:

  • प्रमुख मोड के.ts साथ एक्सटेंशन के साथ एसोसिएट फाइलें । typescript-mode
  • tss-setup-current-bufferटाइपस्क्रिप्ट मोड शुरू होने पर फंक्शन को रन करें ।

कुछ फ़ाइल नामों के लिए किस प्रमुख मोड का उपयोग करना है , यह चुनने के लिए, वैरिएबल में एक प्रविष्टि जोड़ें auto-mode-alist। अपनी इनिट फ़ाइल में निम्न पंक्ति रखें:

(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))

\.ts\'एक नियमित अभिव्यक्ति है जो .tsएक्सटेंशन के साथ फ़ाइल नामों से मेल खाती है ।

फ़ंक्शन को चलाने के लिए tss-setup-current-bufferजब भी टाइपस्क्रिप्ट मोड शुरू होता है (मुझे लगता है कि आप इसे टाइपस्क्रिप्ट मोड फ़ाइलों के लिए भी चलाना चाहते हैं जिसमें .tsएक्सटेंशन नहीं है ), इसे टाइपस्क्रिप्ट मोड स्टार्टअप हुक में जोड़ें

(add-hook 'typescript-mode-hook 'tss-setup-current-buffer)

इस बात पर निर्भर करता है कि आपने कैसे स्थापित किया है typescript.elऔर tss.el, आपको यह भी घोषित करने की आवश्यकता हो सकती है कि फ़ंक्शन typescript-modeऔर tss-setup-current-bufferउन फ़ाइलों से लोड किया जाना है। यह लोड होने से बचता है typescript.elऔर tss.elजैसे ही Emacs शुरू होता है: वे मांग पर लोड हो जाएंगे, जब आप पहली बार कोई .tsफ़ाइल खोलते हैं या typescript-modeस्पष्ट रूप से चलाते हैं ।

(autoload 'typescript-mode "Major mode for typescript files" t)
(autoload 'tss-setup-current-buffer "Set up the current file for TSS" t)

9

आप क्या देख रहे हैं find-file-hook:

(add-hook 'find-file-hook 'my-project-hook)
(defun my-project-hook ()
  (when (string= (file-name-extension buffer-file-name) "ts")
    (typescript-mode)
    (tss-setup-current-buffer)))

4
जबकि यह काम करेगा, यह ध्यान दिया जाना चाहिए कि फ़ाइल खोजने या प्रमुख मोड के लिए अनुकूलन स्थापित करने के लिए प्रमुख मोड शुरू करने का यह सही तरीका नहीं है। auto-mode-alistनिर्धारित करने के लिए जब टाइपप्रति मोड प्रारंभ करेंगे करने के लिए इस्तेमाल किया जाना चाहिए, और एक typescript-mode-hookको चलाने के लिए इस्तेमाल किया जाना चाहिए tss-setup-current-buffer
जॉर्डन बियोनडो

का उपयोग करना (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))और (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)इसे करने का सामान्य तरीका होगा।
जॉर्डन बियोनडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.