2012-05-21 25 views
8

मैं Emacs में org-mode उपयोग कर रहा हूँ मेरी विकास गतिविधियों दस्तावेज़ के लिए: एक फाइल करने के लिए शाब्दिक संदर्भ। उन कार्यों में से एक जो मुझे लगातार हाथ से करना चाहिए कोड के क्षेत्रों का वर्णन करना है। Emacs एक बहुत अच्छा Bookmark List है: CTRL साथ एक बुकमार्क बनाने -, एक्सआरमीटर उन्हें CTRL साथ सूची - एक्सआरएल। यह बहुत उपयोगी है, लेकिन मुझे काफी जरूरत नहीं है।Emacs ऑर्ग मोड: लाइन

संगठन मोड में लिंक की अवधारणा है, और org-store-link कमांड किसी भी फ़ाइल में वर्तमान स्थिति का एक लिंक रिकॉर्ड करेगा, जिसे संगठन फ़ाइल में चिपकाया जा सकता है। इस के साथ समस्या यह दो गुना है:

  • यह एक संगठन-कड़ी के रूप में संग्रहीत किया जाता है, और लिंक की गई स्थिति सीधे दिखाई नहीं है (बस वर्णन)।
  • यह प्रारूप file/search है, जो नहीं है जो मैं चाहता में संग्रहित है।

    absolute-file-path:line 
    

    और यह:

मैं इतना है कि मैं, अंत संपादित यह ऑर्ग मोड में पेस्ट कॉपी कर सकते हैं यह यदि आवश्यक हो, इस तरह एक साधारण स्वरूप के साथ, शाब्दिक रूप में बुकमार्क की आवश्यकता है वर्तमान बिंदु स्थिति से प्राप्त किया जाना चाहिए। position-to-kill-ring (मैं एक कीबोर्ड शॉर्टकट को यह बाँध होगा)

  • org-mode बफर पर जाएं:

    • स्थिति जो मैं रिकॉर्ड करने के लिए
    • कॉल एक समारोह रखना चाहते हैं: कार्यप्रवाह के रूप में सरल रूप में किया जाएगा।
    • स्थिति यंक। यदि
    • संपादित की जरूरत है (कभी कभी मैं, संबंधित पथ से निरपेक्ष पथ को बदलने की जरूरत के बाद से मेरी कोड विभिन्न मशीनों में एक अलग स्थान में है)

    दुर्भाग्य से मेरी lisp न के बराबर है, इसलिए मैं पता नहीं कैसे यह करने के लिए। क्या मेरी समस्या का कोई आसान समाधान है?

    संपादित करें:: दुबारा लिखा यह प्रारूप methode का उपयोग, लेकिन मैं अभी भी मार-अंगूठी करने के लिए भंडारण नहीं लगता है

  • उत्तर

    12
    (defun position-to-kill-ring() 
        "Copy to the kill ring a string in the format \"file-name:line-number\" 
    for the current buffer's file name, and the line number at point." 
        (interactive) 
        (kill-new 
        (format "%s:%d" (buffer-file-name) (save-restriction 
                 (widen) (line-number-at-pos))))) 
    
    +2

    प्रारूप '% s ::% d "' होना चाहिए, यानी दो कॉलन के साथ –

    0

    एक elisp अपने आप को इसके बारे में हालांकि एक अच्छा व्यायाम एट देखा के रूप में शुरुआत मैं मेरे वर्कफ़्लो में कम घुसपैठ (आपके बारे में नहीं पता)। इसके अलावा मैंने कॉलम स्थिति जोड़ने की क्षमता भी जोड़ दी है।

    (defvar current-file-reference "" "Global variable to store the current file reference") 
    
    (defun store-file-line-and-col() 
        "Stores the current file, line and column point is at in a string in format \"file-name:line-number-column-number\". Insert the string using \"insert-file-reference\"." 
        (interactive) 
        (setq current-file-reference (format "%s:%d:%d" (buffer-file-name) (line-number-at-pos) (current-column)))) 
    (defun store-file-and-line() 
        "Stores the current file and line oint is at in a string in format \"file-name:line-number\". Insert the string using \"insert-file-reference\"." 
        (interactive) 
    (setq current-file-reference (format "%s:%d" (buffer-file-name) (line-number-at-pos)))) 
    
    (defun insert-file-reference() 
        "Inserts the value stored for current-file-reference at point." 
        (interactive) 
        (if (string= "" current-file-reference) 
         (message "No current file/line/column set!") 
        (insert current-file-reference))) 
    

    बड़े पैमाने पर परीक्षण नहीं किया गया लेकिन मेरे लिए काम कर रहा है। बस दुकान-फ़ाइल-और-लाइन या दुकान-फ़ाइल-लाइन और col बिंदु पर संग्रहीत मूल्य डालने के लिए वर्तमान स्थिति और डालने-फ़ाइल-संदर्भ स्टोर करने के लिए मारा।

    5

    आप org-create-file-search-functions और org-execute-file-search-functions हुक का उपयोग करना चाहते हैं।

    उदाहरण के लिए, यदि आप खोज आप पाठ मोड फ़ाइलों के लिए वर्णन की जरूरत है, इस का उपयोग करें:

    (add-hook 'org-create-file-search-functions 
         '(lambda() 
         (when (eq major-mode 'text-mode) 
          (number-to-string (line-number-at-pos))))) 
    
    (add-hook 'org-execute-file-search-functions 
         '(lambda (search-string) 
         (when (eq major-mode 'text-mode) 
          (goto-line (string-to-number search-string))))) 
    

    फिर M-x org-store-link RET सही बात (खोज स्ट्रिंग के रूप में एक लाइन नंबर की दुकान) और प्रतिलिपि करना होगा सह (यानी) फ़ाइल खोल देगा और इस लाइन नंबर पर जायेगा।

    आप निश्चित रूप से अन्य मोड और/या शर्तों की जांच कर सकते हैं।

    0

    Btw, यदि आप फ़ाइल की तुलना में बेहतर कुछ चाहते हैं: लाइन, आप (ऐड-log.el में) add-log-current-defun उपयोग करने के लिए जो वर्तमान समारोह के नाम पर लौटना चाहिए कोशिश कर सकते हैं।