2011-05-20 16 views
12

जो लोग नहीं जानते हैं, imenu emacs में एक चीज है जो एक मोड को मेनू बार में एक या अधिक मेनू आइटम डालने देती है। सबसे आम उपयोग एक ड्रॉप-डाउन मेनू से "सामग्रियों की तालिका" को सुलभ बनाना है, इसलिए उपयोगकर्ता जल्दी से कार्यों या कक्षाओं या दस्तावेज़ों में अनुभागों की घोषणाओं पर कूद सकता है।मैं एक elisp समारोह को असंकालिक रूप से कैसे चला सकता हूं?

इमेनू के पास कुछ अलग है काम करने के तरीके - पहले और अधिक सामान्य रूप से उपयोग किए जाने वाले तरीके में, एक प्रमुख मोड इमेनू को रेगेक्सप्स प्रदान करता है, और इमेनू बफर के स्कैन करने और इंडेक्स बनाने के लिए उन रेगेक्स का उपयोग करता है। Regexps की सूची imenu-generic-expression में डालकर एक प्रमुख मोड इसे सेट करता है। दूसरा तरीका प्रमुख मोड के लिए अपना स्कैन करने के लिए है। यह वेरोड द्वारा परिभाषित फ़ंक्शन के नाम पर परिवर्तनीय imenu-create-index-function को सेट करके ऐसा कर सकता है, जो सामग्री की तालिका वाली एक सूची देता है।

मैं बाद में कर रहा हूं - imenu-create-index-function - लेकिन कभी-कभी एफएन को चलाने के लिए बहुत समय लगता है, 3 या 4 सेकंड या उससे अधिक कहें, जो यूआई को फ्रीज करता है। अगर मैं ऑपरेशन एसिंक्रोनस करता हूं, तो वह समस्या हल हो जाएगी।

मुझे एसिंच प्रक्रियाओं के बारे में पता है। स्कैन तर्क elisp में लागू किया गया है। क्या एसिंच प्रक्रिया में elisp चलाने के लिए संभव है? यदि हां, तो कैसे?

या, क्या एसिंक प्रक्रिया में जाने के बिना, एमएक्स में नियमित रूप से कुरकुरा रूप से चलाने के लिए कोई तरीका है?

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

सिफारिशें?

उत्तर

9

एलीसिप को असीमित रूप से चलाने के लिए आप run-with-idle-timer या run-with-timer का उपयोग कर सकते हैं। मुझे लगता है कि आप idle संस्करण चाहते हैं। अधिक जानकारी के लिए प्रलेखन लिंक देखें।

नोट: यदि कोड को चलाने के लिए 3 या 4 सेकंड लगते हैं, तो यह अब भी लंबा लगेगा (और जब भी यह चलता है तो अपने Emacs को फ्रीज करें), इसलिए यदि आप काम को छोटे टुकड़ों में तोड़ सकते हैं जो इसे केवल लेता है एक समय में 5 सेकंड या तो, यह अच्छी तरह से काम कर सकता है।

एक पैकेज जो मैं हर समय उपयोग करता हूं, pabbrev.el, निष्क्रिय टाइमर का वास्तव में उपयोग करता है - मैं इसे कभी भी नहीं देखता हूं। यह देखने के लिए यह एक अच्छा पैकेज हो सकता है कि यह कैसे काम को तोड़ता है (यह सभी खुले बफर स्कैन कर रहा है और एक शब्द आवृत्ति सूची बना रहा है)।

1

आप प्रक्रिया के रूप में बैच मोड में emacs को spawning द्वारा एसिंच प्रक्रिया में elisp चला सकते हैं, http://www.emacswiki.org/emacs/BatchMode देखें। इसके अलावा, जहां तक ​​मुझे पता है वहां मूल रूप से कुछ भी नहीं है।

ऐसा लगता है कि http://nschum.de/src/emacs/async-eval/ मूल रूप से ऐसा करने के लिए आवश्यक बॉयलरप्लेट को लपेटता है। कोई सुराग नहीं है अगर यह सक्रिय रूप से बनाए रखा गया है या कुछ भी।

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

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