Evite plegar archivos de organización abiertos por ediff


7

El plegado se interpone en el camino al fusionar dos archivos de organización usando ediff, por lo que estoy tratando de deshabilitar todo el plegado en búferes de modo de organización creados por ediff. El comportamiento de plegado sin construcción no debe verse afectado.

Ingenuamente, creo que algo similar a lo siguiente debería funcionar:

  (add-hook 'ediff-mode-hook
        (lambda ()
          (set (make-local-variable 'org-inhibit-startup-visibility-stuff) t)))

Estoy bastante seguro de que esta es la variable de organización para modificar (en lugar de org-startup-foldedo org-agenda-inhibit-startup).

He intentado varios ganchos en vano (principalmente ediff-mode-hook, ediff-before-setup-hook, ediff-meta-mode-hook, y ediff-prepare-buffer-hook- lo que es probable que sea demasiado tarde) con la esperanza de que la variable internados será heredado.

Es muy posible que esté usando make-local-variable incorrectamente; el patrón solo está tomado de lo que he visto ampliamente.

Solo establecer el valor a nivel mundial ha sido efectivo (pero eso no es lo que estoy buscando). ¿Debería (ab) usar el mecanismo de asesoramiento?


No estoy seguro de qué gancho usar, pero ¿por qué no simplemente llamar a una función show-all? ( org-modeestá construido encima outline-modey parece que siempre quieres que muestre todo).
Dan

(add-hook 'ediff-prepare-buffer-hook 'show-all)¡Hace el truco! Agregue eso como respuesta, @Dan? Todavía tengo curiosidad por las variables locales para ediff, pero creo que show-alles la mejor solución para mi problema.
ebpa

Respuestas:


9

Parece que tu objetivo es que los org-modearchivos siempre muestren todo cuando estás dentro ediff. La solución más simple es probablemente evitar el enfoque de las variables locales y simplemente colocar show-allel enlace correspondiente, ediff-prepare-buffer-hookque se ejecuta después de configurar los buffers A, B y C:

 (with-eval-after-load 'outline
   (add-hook 'ediff-prepare-buffer-hook #'org-show-all))

A pesar del nombre, org-show-alltambién funciona en el outline-modeque org-modeestá construido encima. A diferencia outline-show-all, muestra cajones de propiedad y bloques como #+begin_src ... #+end_src.

org-show-allse ha agregado en Org 9.1.6. En versiones anteriores puedes usar outline-show-allo show-all.

(Tenga en cuenta, según un comentario, que show-allestá marcado como obsoleto en Emacs 25.1 a favor de outline-show-all. El último símbolo no está vinculado en 24.5.)


Parece que show-allse define de manera sensata, por lo que no necesita condiciones defensivas en el gancho y se puede invocar de forma segura dentro de los modos sin organización / sin esquema.
ebpa

3
Gran respuesta. Pero show-allestá marcado como obsoleto desde el 25.1. Mejor usar outline-show-all, creo. (El primero es solo un alias para el segundo.)
Harald Hanche-Olsen

@ HaraldHanche-Olsen: gracias por la nota! He editado la respuesta para reflejarlo.
Dan

3

Otra opción se puede encontrar en la página de worg . La idea básica es usar ediff-select-hookpara desplegar un elemento cada vez que se selecciona una región determinada en ediff y se pliega de nuevo en el ediff-unselect-hook. Estoy publicando el código aquí para completar

;; Check for org mode and existence of buffer
(defun f-ediff-org-showhide (buf command &rest cmdargs)
  "If buffer exists and is orgmode then execute command"
  (when buf
    (when (eq (buffer-local-value 'major-mode (get-buffer buf)) 'org-mode)
      (save-excursion (set-buffer buf) (apply command cmdargs)))))

(defun f-ediff-org-unfold-tree-element ()
  "Unfold tree at diff location"
  (f-ediff-org-showhide ediff-buffer-A 'org-reveal)  
  (f-ediff-org-showhide ediff-buffer-B 'org-reveal)  
  (f-ediff-org-showhide ediff-buffer-C 'org-reveal))

(defun f-ediff-org-fold-tree ()
  "Fold tree back to top level"
  (f-ediff-org-showhide ediff-buffer-A 'hide-sublevels 1)  
  (f-ediff-org-showhide ediff-buffer-B 'hide-sublevels 1)  
  (f-ediff-org-showhide ediff-buffer-C 'hide-sublevels 1))

(add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element)
(add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.