2009-02-14 9 views
18

क्या एमएसीएस के लिए मेरे सी प्रोजेक्ट में टैग्स फ़ाइल को स्वचालित रूप से अपडेट करने के लिए कोई प्लगइन है (उदाहरण के लिए बफर सेव या एक्सेस पर) या कोई नया फाइल नहीं है यदि कोई TAGS फ़ाइल मौजूद नहीं है?Emacs के साथ एक टैग फ़ाइल को प्रोग्रामेटिक रूप से बनाने/अपडेट करने के लिए कैसे करें?

मैं विंडोज (बिना सिगविन के) पर चल रहा हूं, इसलिए सभी फैंसी शैल स्क्रिप्टिंग मदद नहीं करता है। मैं किसी देशी इमेक्स समाधान की उम्मीद कर रहा था जो बाहरी स्क्रिप्टिंग का उपयोग नहीं कर रहा था।

मैंने पहले ही build-tags.el और etags-table.el की कोशिश की लेकिन इनमें से कोई भी वास्तव में काम नहीं करता (जिस तरह से मैं चाहता था)।

कोई अन्य विचार?

उत्तर

4

क्यों नहीं अपनी निर्माण स्क्रिप्ट में ctags का निष्पादन जोड़ें? जब आप संकलित करते हैं तो आपको वास्तव में केवल एक नई टैग फ़ाइल की आवश्यकता होती है (सबसे अधिक)। मैं बस हर रात टैग फ़ाइल बनाने के लिए एक निर्धारित कार्य लिखना चाहता हूं। बहुत अच्छी तरह से काम करने लगता है।

+3

मैं चाहता हूं कि टैग में फ़ाइल को अपडेट किया जाए जैसे ही नए प्रतीक स्रोत में पेश किए जाते हैं। फ़ाइल से फ़ाइल में कूदने के लिए विकास करते समय मैं व्यापक रूप से TAGS ब्राउज़िंग क्षमताओं का उपयोग करता हूं। एक बार रात में अक्सर पर्याप्त नहीं होता है। हमारे बहु डेवलपर पर्यावरण में व्यक्तिगत निर्माण स्क्रिप्ट मोड संभव नहीं हैं। – cschol

+0

आप अपना कोड कैसे बनाते हैं? उस स्क्रिप्ट को उस स्क्रिप्ट के साथ लपेटें जो निर्माण करता है, फिर ctags कमांड चलाता है। –

+3

मैं असहमत हूं - आप बफर संपादित करने के तुरंत बाद टैग चाहते हैं। – jrockway

2

मैं अपने दिन-प्रतिदिन के काम के लिए अर्थात् + gnu वैश्विक संयोजन का उपयोग करता हूं। जीएनयू ग्लोबल के डाटाबेस प्रति दिन एक बार अपडेट होते हैं, जबकि अर्थपूर्ण उन्हें मूल नेविगेशन के लिए उपयोग करते हैं, और फ्लाई पर बदली गई फाइलों को फिर से पार्स करते हैं।

आप my article about Cedet

9

यहाँ में इन पैकेजों के बारे में अधिक जानकारी प्राप्त कर सकते हैं कि कैसे मैं एक सी परियोजना के लिए एक टैग फाइल उत्पन्न:

  1. एम एक्स सीडी YOUR_DIRECTORY
  2. एम एक्स
  3. खोजने संकलन। -नाम "*। [सीएचसी]" -प्रिंट | etags -

जो सभी उप निर्देशिकाओं और फ़ाइलों के लिए वर्तमान निर्देशिका में एक टैग फ़ाइल बना देगा।

(defun compile-tags() 
    "compile etags for the current project" 
    (interactive) 
    (cd "YOUR_DIRECTORY") 
    (compile "find . -name \"*.[chCH]\" -print | etags -")) 

नोट:: यदि आप खिड़कियों पर कर रहे हैं आप cygwin स्थापित करें और सुनिश्चित करें c:\cygwin\bin अपने रास्ते में है, ताकि आप find प्राप्त करने की आवश्यकता होगी

यहाँ एक Emacs समारोह है कि सटीक एक ही बात करता है आपके रास्ते में यह भी सुनिश्चित करें कि emacs bin निर्देशिका आपके पथ में है ताकि आप etags भी प्राप्त कर सकें। फ़ाइलों कि पहले से ही टैग फ़ाइलों में हैं पर

(defvar my-auto-update-tags-alist 
    (list '("/some/path/to/TAGS" "command_to_build_tags") 
     '("/another/path/to/TAGS" "another_build_command"))) 

(defun my-auto-update-tags() 
    "Automatically update TAGS files" 
    (tags-table-check-computed-list) 
    (let ((filename (buffer-file-name)) 
     build-cmd) 
    (mapc (lambda (tag-file) 
      (set-buffer tag-file) 
      (when (member filename (tags-table-files)) 
       (setq build-cmd (cdr (assoc tag-file my-auto-update-tags-alist))) 
       (when build-cmd 
       (call-process build-cmd nil 0)))) 
      tags-table-computed-list))) 

(add-hook 'after-save-hook 'my-auto-update-tags) 

यह केवल काम करेंगे (किया मैं उल्लेख यह अपरीक्षित है?):

+2

आप खोज और अन्य सहित gnu utils के मूल विंडोज संस्करण का भी उपयोग कर सकते हैं। मैं उन्हें साइगविन से तेज़ पाता हूं। http://gnuwin32.sourceforge.net/ – justinhj

1

यह आपको करीब (untested) मिल सकता है। यदि आप एक नई फाइल जोड़ते हैं तो आपको पहली बार TAGS फ़ाइल को पुन: उत्पन्न करना होगा। कॉल-प्रोसेस भाग को असीमित रूप से काम करना चाहिए, इसलिए यह कुछ क्षण हो सकता है जब तक कि टैग्स फ़ाइल वास्तव में पुनर्निर्मित नहीं की जाती है (यदि यह भी काम करता है;)

+2

क्या आप इसका परीक्षण करने का प्रयास करेंगे? –

9

etags-update आपके मामले में सहायता कर सकता है। मैंने इसका परीक्षण नहीं किया, लेकिन रीडमे के अनुसार:

etags-update.el एक Emacs वैश्विक मामूली मोड है जो फ़ाइल को सहेजते समय आपके टैग को अपडेट करता है।

मैं Emacswiki page for building TAGS files

2

पर यह पाया आजमाएँ मेरी `ctags.el '[1] मॉड्यूल।

विन्यास उदाहरण:

(setq tags-revert-without-query t) 
(global-set-key (kbd "<f5>") 'ctags-create-or-update-tags-table) 

तो बस <f5> प्रेस अद्यतन करें या अपनी टैग फ़ाइल बनाने के लिए। यह फ़ंक्शन वर्तमान में और उसके मूल निर्देशिका में TAGS फ़ाइल को ढूंढें, यदि कोई TAG फ़ाइल नहीं मिली है तो यह आपको पूछता है कि नया कहां बनाएं।

यह एक नई लाइब्रेरी है और शायद इसमें बग आदि हैं, इसलिए किसी भी मदद का स्वागत है।

[1] https://bitbucket.org/semente/ctags.el/

1

स्थापित पाते हैं और ctags (https://github.com/redguardtoo/find-and-ctags), तो ~/.emacs में कोड नीचे डालें,

(defun my-setup-develop-environment() 
    (interactive) 

    ;; you can use `find-and-ctags-current-full-filename-match-pattern-p' instead 
    (when (find-and-ctags-current-path-match-pattern-p "/MYPROJ") 
    (setq-local tags-table-list 
       (list (find-and-ctags-run-ctags-if-needed "~/workspace/MYPROJ" ; project directory 
       '(("-not -size +64k" "--exclude=*.min.js") ; (find-opts ctags-opts) 
                  ;; you may add more find-opts ctags-opts pair HERE to run find&ctags again to APPEND to same TAGS file 
                  ;; ctags-opts must contain "-a" to append 
                  ;; (find-opts "-a") 
                  ))))) 

    ;; for other projects 
    ;; insert NEW `when' statements here 
) 
(add-hook 'prog-mode-hook 'my-setup-develop-environment) ; prog-mode require emacs24+ 
(add-hook 'lua-mode-hook 'my-setup-develop-environment) ; lua-mode does NOT inherit from prog-mode 

;; OPTIONAL 
(add-hook 'after-save-hook 'find-and-ctags-auto-update-tags) 

यह खिड़कियों पर काम करता है, आप सभी की जरूरत की जगह है " ~/वर्कस्पेस/MYPROJ "के साथ" सी:/वर्कस्पेस/MYPROJ "। सीटीएजी निष्पादन योग्य कोई संस्करण हो सकता है, क्योंकि उत्पादित टैग में केवल सापेक्ष पथ होता है।

+1

यह मेरे दृष्टिकोण के समान कुछ है, मुझे लगता है। क्या आप जबरन मौजूदा टैग्स फ़ाइल को हर बार बदल रहे हैं? यदि ऐसा है, तो आप पीढ़ी के बाद पुरानी और नई TAGS फ़ाइल की तुलना करके इसे बेहतर बना सकते हैं, और यदि वे भिन्न होते हैं तो केवल इसे क्लोबबर कर सकते हैं, ताकि Emacs में कोई बदलाव न दिखाई दे। इसके अलावा आप तय कर सकते हैं कि समान मानदंडों का उपयोग करके शुरुआती 'खोज' चलाकर टैग को उत्पन्न करना परेशान करना है, लेकिन वर्तमान TAGS फ़ाइल की तुलना में '-नवर' भी है। अगर कोई नई फाइल नहीं है, तो कुछ भी मत करो। मैं 'हेड -1' के माध्यम से '-नवर' कमांड पाइप करता हूं ताकि जैसे ही यह एक मेल खाने वाली फ़ाइल पाता है। – phils

+0

हां, मैं हर बार टैग्स जबरन बदलता हूं। मेरा प्रोजेक्ट वेब फ्रंटएंड प्रोजेक्ट है। "-नवीन" एक अच्छा विचार है। मैं निश्चित रूप से कोशिश करूँगा। क्या आप मुझे कुछ कोड नमूना दिखा सकते हैं? –

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

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