2010-03-19 28 views
12

Có rất nhiều cách để gấp mã trong Emacs và tôi đã giải quyết ở trên bằng cách sử dụng chế độ phác thảo nhỏ ... nó hoạt động tuyệt vời!Emacs chế độ gấp liên tục

Tuy nhiên, tôi thực sự muốn gấp của mình được duy trì khi tôi đóng và mở lại tệp. Nó là khá bực bội để có gấp thiết lập trong một tập tin theo cách tôi thích nó, chỉ để có mà bị mất khi tôi khởi động lại Emacs.

Có ai đã tìm cách giữ trạng thái gấp của tệp liên tục không?

+1

Không phải là câu trả lời chính xác, nhưng bạn có thể sử dụng org-mode với [orgfold.el] (http://www.emacswiki.org/emacs/orgfold.el) hoặc [orgfold-individual-file.el] (http://www.emacswiki.org/emacs/orgfold-separate-file.el) - mặc dù sẽ tốt hơn nếu sau này chỉ làm việc với một bộ lưu trữ trạng thái toàn cục tệp (như trong [saveplace.el] (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/saveplace.el)). – Mark

Trả lời

4

Edit: Bây giờ tôi hiểu câu hỏi ...

Làm thế nào về một cái gì đó giống như nippet mã sau đây. Nó dường như làm việc cho tôi, mặc dù tôi đã không tìm ra cách để tránh bị nhắc nhở cho các biến địa phương tập tin mỗi lần.

(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) 

Giải pháp này đòi hỏi bạn "gieo hạt" tập tin của bạn với một cái gì đó như:

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

Cảm ơn phản hồi Trey. Để rõ ràng - tôi có thể bật chế độ phác thảo nhỏ cho bất kỳ loại tệp nào tôi thích bằng móc. Những gì tôi đang tìm kiếm là để gấp một mục nhập mã, đóng bộ đệm và sau đó khi tôi mở lại tệp, tôi muốn mục nhập đó vẫn được gấp. –

+1

@Chris Tôi hiểu ngay bây giờ ... không biết rằng điều này là có thể. –

+0

Sự lưu giữ này sẽ được lưu giữ ở đâu? Trong chính tệp đó? Ý tưởng tồi; một số tập tin khác? có thể, tôi cho rằng, nhưng không có móc như vậy để làm điều này, được nêu ra. Và tôi vẫn còn nghi ngờ việc bỏ những tập tin đó khắp nơi. Nếu được thu thập trong một thư mục .. sheesh, đó sẽ là rất lớn. –

0

Tôi nhận ra đây là một bài cũ nhưng FWIW Tôi tạo ra một chế độ nhỏ mà bổ sung cho hs-nhỏ-mode, phác thảo -mode vv Tôi cũng "thực sự muốn gấp của tôi để được tiếp tục tồn tại khi tôi đóng và mở lại các tập tin". :)

Gói này có trong MELPA kể từ hôm nay và được gọi là lớp phủ liên tục.

Nó cũng có sẵn trực tiếp trên github: https://github.com/mneilly/Emacs-Persistent-Overlays

Các vấn đề liên quan