Emacs постоянный режим сворачивания - PullRequest
13 голосов
/ 19 марта 2010

Существует множество способов сложить код в Emacs, и я остановился на использовании вспомогательного режима структуры ... он прекрасно работает!

Однако я действительно хочу, чтобы мое свертывание сохранялось при закрытии и повторном открытии файлов. Очень неприятно, что сворачивание в файле настроено так, как мне нравится, только потеря его при перезапуске Emacs.

Кто-нибудь нашел способ сохранить состояние свертывания файла постоянным?

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

Редактировать: Теперь, когда я понял вопрос ...

Как насчет чего-то вроде следующего фрагмента кода. Кажется, это работает для меня, хотя я так и не понял, как не каждый раз запрашивать локальную переменную файла.

(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:            
3 голосов
/ 12 марта 2016

Я понимаю, что это старый пост, но, FWIW, я создал второстепенный режим, который дополняет режим hs-minor-mode, outline-mode и т. Д. Я также «очень хочу, чтобы мое свертывание сохранялось при закрытии и повторном открытии файлов». :)

Пакет находится в MELPA на сегодняшний день и называется постоянными наложениями.

Он также доступен непосредственно на github: https://github.com/mneilly/Emacs-Persistent-Overlays

...