org-mode – ¿Qué combinación de personalizaciones se requiere para que los archivos de organización siempre se abran exactamente como se cerraron?

Pregunta:

org-personalizar tiene un nodo para el startup folded , con opciones no fold , fold , content y show everything . No parece haber una opción para "recordar el último estado plegado". Para un modo principal tan personalizable, creo que esta es una omisión evidente. Incluso me señalaron el var org-inhibit-startup-visibility-stuff indocumentado, pero esto solo da el modo completamente abierto.

Respuesta:

Debe agregar una función a uno de los ganchos de almacenamiento intermedio que serializa el contenido de (punto) y (org-outline-overlay-data) en algún lugar, tal vez como una variable de archivo local, y también agregar una variable local a eval a función para restaurar el estado. Aquí hay un ejemplo que casi hace lo que quieres:

(defvar org-outline-state () "State data for outline visibility")
(make-variable-buffer-local  'org-outline-state)
(put 'org-outline-state 'safe-local-variable #'listp)


(defun load-org-outline-state ()
  "Load the last point and outline state stored in this file and apply them.
This function is usually run from a local file variable."
  (org-set-outline-overlay-data (cadr org-outline-state))
  (add-hook 'before-save-hook 'save-org-outline-state nil t)
  ;; we need visibility changes to modify the buffer so we can save them.
  (add-hook 'org-cycle-hook
        (lambda (arg)
          (set-buffer-modified-p t))
        nil t)
  (add-hook 'find-file-hook
        (lambda ()
          (when (and (boundp 'org-outline-state) org-outline-state)
        (goto-char (car org-outline-state))))))


(defun save-org-outline-state ()
  "Write point and outline state to the file.
The first time you run this it sets up the file to save the state
persistently."
  (interactive)
  (add-hook 'before-save-hook 'save-org-outline-state nil t)
  (add-hook 'org-cycle-hook
        (lambda (arg)
          (set-buffer-modified-p t))
        nil t)
  (add-hook 'find-file-hook
        (lambda ()
          (when (and (boundp 'org-outline-state) org-outline-state)
        (goto-char (car org-outline-state)))))

  ;; Save the data
  (save-excursion
    (add-file-local-variable
     'org-outline-state
     (list (point) (org-outline-overlay-data)))

    ;; Make sure we have a load local variable and add it if not.
    (org-with-wide-buffer
     (goto-char (point-min))
     ;; we do this search because otherwise we will add a new eval line on every
     ;; save.
     (unless (re-search-forward "^# eval: (load-org-outline-state)" nil 'mv)
       (add-file-local-variable 'eval '(load-org-outline-state)))))) 

(add-to-list 'safe-local-eval-forms
         '(load-org-outline-state))

Modificará el contenido de su archivo (agregando variables locales y datos al final).

Alternativamente, puede almacenar la visibilidad en cada titular a través de un gancho de almacenamiento intermedio similar, y luego en un mapa de función de carga similar sobre ellos para establecer la visibilidad. Es solo otra forma de hacerlo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım