मुझे अपनी कॉन्फ़िगरेशन फ़ाइलों में eval-after-load के साथ कब उपयोग करना चाहिए?


15

मैं अपनी कॉन्फ़िगरेशन फ़ाइलों पर गया और कुछ सफाई करना चाहता था।

मेरी समझ यह with-eval-after-loadथी कि संबंधित पैकेज लोड होने के ठीक बाद उसके शरीर का मूल्यांकन किया जाएगा। अपनी कॉन्फ़िगरेशन फ़ाइलों को साफ करते हुए और उन्हें और भी अधिक विभाजित करते हुए, मैं हर पैकेज कॉन्फ़िगरेशन को संलग्न करना चाहता था with-eval-after-load। जब तक मैंने कॉन्फ़िगरेशन को संलग्न नहीं किया helmऔर तब तक सब कुछ अपेक्षित था helm-projectile

यहाँ मेरे मन में क्या है ( लिस्प / init-helm.el ):

(with-eval-after-load 'helm
  (setq helm-mode-line-string "")
  (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
  (define-key global-map (kbd "C-c m") 'helm-imenu)
  (define-key global-map (kbd "C-x b") 'helm-buffers-list))

(with-eval-after-load 'helm-command
  (global-set-key (kbd "M-x") 'helm-M-x))

(with-eval-after-load 'helm-projectile
  (helm-projectile-on))

Emacs को पुनः आरंभ करने के बाद, मुझे यह विंडो आकार का मुद्दा मिलता है:

Emacs विंडो आकार मुद्दा

इस प्रकार मैं अपनी विंडो का आकार बदल देता हूं:

(set-frame-parameter nil 'fullscreen 'fullboth)

मैं अनुमान लगा रहा हूँ कि मैं दुरुपयोग कर रहा हूँ with-eval-after-load, कैसे कोई अपने Emacs विन्यास को पवित्र करेगा और यह सुनिश्चित करेगा कि कोई भी चीज़ टूटे नहीं कि पैकेज क्या स्थापित हो?


यह सरासर विचित्र है। (संभवतः एक बग?)
पायथन नॉट

क्या आपके पास कोई विचार है जो इससे संबंधित हो सकता है? मैं Railwaycat के OS X पोर्ट का उपयोग कर रहा हूं और मैं ऐसा मुद्दा नहीं जोड़ना चाहता जहां यह संबंधित नहीं है :)।
मैथ्यू मार्केस

8
मैंने with-eval-after-loadअपने सभी पैकेज से संबंधित अनुकूलन को एक बार लपेटने के लिए उपयोग करने की कोशिश की । फिर मैंने प्रकाश को देखा और use-packageइसके बजाय उपयोग करना शुरू कर दिया।
इसका अजायबघर

@itsjeyd यह वास्तव में बहुत आसान और सुविधाजनक है! हालाँकि मैं कुछ परेशानी में भाग गया: मैंने टिप्पणी की (package-initialize)और इसे बदल दिया, (require 'use-package)लेकिन मुझे फ़ाइल त्रुटि मिलेगी : एमएसीएस को पुनरारंभ करते समय लोड फ़ाइल, ऐसी कोई फ़ाइल या निर्देशिका, उपयोग-पैकेज नहीं खोल सकता । और फिर भी, एक बार Emacs शुरू कर दिया है मैं (require 'use-package)कोई मुद्दा नहीं के साथ विकसित कर सकते हैं । अंत में, मैंने भी कोशिश की with-eval-after-load, अभी भी वही त्रुटि है। पैकेज से पैकेज का उपयोग करते समय कैसे इंस्टॉल किया use-package जाए, इसके बारे में रीडमी बहुत स्पष्ट नहीं है ।
मैथ्यू मारिक्स

1
हमें अपना दिखाएं .emacs, अधिमानतः एक स्ट्रिप-डाउन संस्करण जो समस्या को कुछ पंक्तियों और यथासंभव कुछ बाहरी पैकेजों के साथ प्रदर्शित करता है। यह शायद स्टार्टअप के दौरान फ्रेम सेटअप बनाम पैकेज लोड के समय के साथ करना है । लेकिन आपके कोड को देखे बिना, हम बहुत कुछ नहीं कर सकते। हमें यह भी बताएं कि आप कौन से संस्करण Emacs का उपयोग कर रहे हैं।
गिलेस एसओ- बुराई को रोकना '27

जवाबों:


2

मैं with-eval-after-loadबहुत अधिक उपयोग करता हूं , ज्यादातर तत्वों को जोड़ने या हटाने के लिए या डिफ़ॉल्ट मान के मूल्यांकन के बाद सूचियों से। इस तरह मुझे डिफ़ॉल्ट मानों में परिवर्तन का ट्रैक रखने की आवश्यकता नहीं है।

आपके helmप्रारंभ के साथ समस्या के लिए , दस्तावेज़ अनुशंसा करता है कि (require 'helm-config)आपके init.elया उसके आश्रितों में मौजूद हो ।

मैंने पाया है कि इसे helm-configशुरू करने के बजाय केवल आरंभीकरण के दौरान आवश्यकता होती है autoload, खासकर जब से मैं इसे लोड कर रहा हूं, वैसे भी लगभग तुरंत ही।


मैं तब से उपयोग करने के लिए बदल गया हूं use-package, और आवश्यकता होने पर helm-configभी मुझे अभी भी वही मुद्दा मिला है। यहां मेरा अपडेट किया गया कॉन्फ़िगरेशन सेटअप है: bitbucket.org/angrybacon/dotemacs/src
मथिउ मार्केस

1

पता चलता है कि यह helmआरंभीकरण (या थोड़ा) के साथ कुछ नहीं करना था ।

Emacs के स्टार्ट-अप टाइम को ऑप्टिमाइज़ करने की मेरी अनन्त खोज में, मैंने अपने कॉन्फ़िगरेशन के आरंभ में ही इंटरफ़ेस से संबंधित सभी चीज़ों को स्थानांतरित कर दिया है। इसमें वह छद्म पूर्णस्क्रीन शामिल है जिसका मैं उपयोग करता हूं।

किसी भी भारी लिस्प के लोड होने से पहले संबंधित लाइन को डालना मेरे मुद्दे को तय किया गया था।

यहाँ संदर्भ के लिए मेरा विन्यास है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.