2015-08-08 5 views
10

क्या Emacs में वर्तमान #ifdef ब्लॉक दिखाना संभव है (उदाहरण के लिए मोड-लाइन में)?Emacs में #ifdef ब्लॉक संलग्न करें

उदाहरण के लिए:

#ifdef A 
... | #cursor position num. 1 
#ifdef !B & C 
... 
#else /* !B & C */ 
foo(); | #cursor position num. 2 
#endif /* !B & C */ 
#endif /* A */ 

यह मोड लाइन में A दिखाना चाहिए, अगर मैं स्थिति 2. में स्थिति 1 में कर्सर रखें और A & !(!B & C) दिखाने मैं पहले से ही छुपा अगर-डीईएफ़ मोड का उपयोग कर रहा हूँ। लेकिन कभी-कभी मुझे सभी #ifdef ब्लॉक के साथ काम करने की ज़रूरत है।

+0

कोई जवाब नहीं है, लेकिन निकटतम संलग्न '# ifdef' तक पहुंचने के लिए' सी-सी सी-यू 'करना काफी उपयोगी है। आप उस स्थान पर लौटने के लिए 'सी-यू सी -' का उपयोग कर सकते हैं। –

उत्तर

3

मुझे हमेशा WhichFunction के साथ सफलता नहीं मिली है, लेकिन इसे अच्छी तरह से सी/सी ++ कोड के साथ काम करना चाहिए। यह अनुकूलन मान्यता योजना में एक नया फ़ंक्शन जोड़ देगा जो आपको बताएगा कि आप #ifdef ब्लॉक के अंदर कब हैं।

(require 'which-func) 
(which-function-mode 1) 
(defun name-of-current-conditional() 
    "rather inelegant coding, but it works" 
    (interactive) 
    (let (outer) 
    (condition-case nil 
     (dotimes (myv 10) 
      (save-excursion 
      (c-up-conditional (1+ myv)) 
      (setq outer (buffer-substring-no-properties 
           (line-beginning-position) 
           (line-end-position))))) 
     (error nil)) 
    outer)) 
(setq which-func-functions '(name-of-current-conditional)) 
+0

आपके काम के लिए धन्यवाद, लेकिन मुझे लगता है कि यह केवल सरल ifdef के उपयोग के मामले में उपयोगी है। यह "ifdef ए" दिखाता है जब मैं "else" के अंतर्गत हूं। मैं इस मामले में "ifdef! ए" या "ifndef ए" देखना चाहता हूँ। यह जटिल "ifdefs" को भी संभाल नहीं करता है। मेरे पास प्रोजेक्ट में बहुत सारे नेस्टेड ifdefs हैं। शायद इस तरह की सुविधा के लिए लगभग असंभव है। – folq

+0

@folq - ठीक है, आप क्लोज़ पर वास्तविक बूलियन तर्क करने के लिए कोड चाहते हैं जैसे आप बाहर निकलते हैं। आप इसे एक साथ रखने के लिए अपने कोड का उपयोग कर सकते हैं, लेकिन यह एक बड़ा काम है जिसे मैं लेना चाहता हूं। –

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