2010-03-19 15 views
12

Emacs में कोड को फोल्ड करने के कई तरीके हैं और मैं रूपरेखा मामूली मोड का उपयोग करने में बस गया हूं ... यह बहुत अच्छा काम करता है!Emacs लगातार फोल्डिंग मोड

हालांकि, मैं वास्तव में फाइलों को बंद और फिर से खोलने पर अपने फोल्डिंग को कायम रखना चाहता हूं। एक फ़ाइल में जिस तरह से मुझे पसंद है, उसमें फोल्डिंग सेट करना काफी निराशाजनक है, जब मैं Emacs को पुनरारंभ करता हूं तो वह खो जाता है।

क्या किसी को भी फाइल की तह स्थिति को लगातार रखने का कोई तरीका मिला है?

+1

नहीं एक सटीक जवाब है, लेकिन आप ([orgfold.el] के साथ ऑर्ग मोड http://www.emacswiki.org/emacs/orgfold.el उपयोग कर सकते हैं) या [orgfold-different-file.el] (http://www.emacswiki.org/emacs/orgfold-separate-file.el) - हालांकि यह अच्छा होगा अगर बाद वाले ने केवल एक वैश्विक राज्य-भंडारण के साथ काम किया फ़ाइल (जैसे [saveplace.el] (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/saveplace.el))। – Mark

उत्तर

4

संपादित करें: अब जब कि मैं सवाल समझ में ...

कैसे कोड की निम्न nippet की तरह कुछ के बारे में। ऐसा लगता है कि मेरे लिए काम करना प्रतीत होता है, हालांकि मुझे पता नहीं चला है कि फ़ाइल स्थानीय चर के लिए हर बार संकेत से कैसे बचें।

(defvar omm-state nil 
    "file local variable storing outline overlays") 
(defun omm-state-mode (&optional arg) 
    "poor man's minor mode to re-apply the outline overlays " 
    (interactive) 
    (omm-re-enable-outline-state) 
    (add-hook 'before-save-hook 'omm-state-save)) 
(defun omm-get-all-overlays() 
    "return a list of outline information for all the current buffer" 
    (save-excursion 
    (let ((all-overlays (overlays-in (point-min) (point-max)))) 
     (mapcar (lambda (o) 
       (list (overlay-start o) (overlay-end o) (overlay-get o 'invisible))) 
       (reverse all-overlays))))) 
(defun omm-re-enable-outline-state (&optional arg) 
    "turn on outline-minor-mode and re-apply the outline information" 
    (outline-minor-mode 1) 
    (when (listp omm-state) 
    (mapcar (lambda (p) 
       (apply 'outline-flag-region p)) 
      omm-state))) 
(defun omm-state-save() 
    "save the outline state in a file local variable 
Note: this just replaces the existing value, you need to start 
it off by adding something like this to your file: 

# Local Variables: 
# omm-state:() 
# mode:omm-state 
# End:    
" 
    (ignore-errors 
    (save-excursion 
     (goto-char (point-max)) 
     (when (search-backward "omm-state:" nil t) 
     (goto-char (match-end 0)) 
     (kill-sexp) 
     (princ (omm-get-all-overlays) (current-buffer))))) 
    nil) 

यह समाधान की आवश्यकता है कि आप की तरह कुछ के साथ अपनी फ़ाइल को "बोने":

# Local Variables: 
# omm-state:() 
# mode:omm-state 
# End:    
+0

फीडबैक ट्रेडी के लिए धन्यवाद। स्पष्ट होने के लिए - मैं किसी भी फ़ाइल प्रकार के लिए नाबालिग मोड को रूपरेखा सक्षम करने में सक्षम हूं। जो मैं खोज रहा हूं वह कोड की प्रविष्टि को फोल्ड करना है, बफर को बंद करना है और बाद में जब मैं फ़ाइल को फिर से खोलता हूं, तो मैं चाहता हूं कि उस प्रविष्टि को अभी भी फोल्ड किया जाए। –

+1

@ क्रिस मैं अब समझता हूं ... यह नहीं पता कि यह संभव है। –

+0

यह दृढ़ता कहाँ संग्रहित की जाएगी? फाइल में ही? बुरा विचार; कुछ अन्य फाइल? संभव है, मुझे लगता है, लेकिन ऐसा करने के लिए ऐसे कोई हुक नहीं हैं, फिर भी। और मैं उन जगहों पर उन फ़ाइलों को छोड़ने के लिए संदिग्ध रहूंगा। अगर एक फ़ोल्डर में एकत्र किया जाता है .. शीश, वह बहुत बड़ा होगा। –

0

मुझे पता है यह एक पुरानी पोस्ट है लेकिन FWIW मैं एक छोटी सी मोड कि HS-मामूली-मोड का पूरक बनाया, रूपरेखा -मोड इत्यादि। मैं भी "वास्तव में फाइलों को बंद और फिर से खोलने पर अपने फोल्डिंग को कायम रखना चाहता हूं"। :)

पैकेज आज के रूप में एमईएलपीए में है और लगातार ओवरले कहा जाता है।

यह भी सीधे GitHub पर उपलब्ध है: https://github.com/mneilly/Emacs-Persistent-Overlays

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