Verhindern Sie das Falten von Organisationsdateien, die von ediff geöffnet wurden

7

Beim Zusammenführen von zwei Organisationsdateien mit ediff wird das Falten gestört, daher versuche ich, das gesamte Falten in von ediff erstellten Organisationsmoduspuffern zu deaktivieren. Das nicht ediff Faltverhalten sollte unberührt bleiben.

Naiv denke ich, dass etwas Ähnliches wie das Folgende funktionieren sollte:

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

Ich bin mir ziemlich sicher, dass dies die zu ändernde Organisationsvariable ist (und nicht org-startup-foldedoder org-agenda-inhibit-startup).

Ich habe ohne Erfolg verschiedene Haken versucht (vor allem ediff-mode-hook, ediff-before-setup-hook, ediff-meta-mode-hook, und ediff-prepare-buffer-hook- was wahrscheinlich zu spät ist) in der Hoffnung , dass die Internierung Variable geerbt werden.

Es ist durchaus möglich, dass ich make-local-variable falsch verwende. Das Muster ist nur von dem entlehnt, was ich weithin gesehen habe.

Nur das globale Einstellen des Werts war effektiv (aber dafür fotografiere ich nicht). Sollte ich (ab) den Beratungsmechanismus verwenden?

ebpa
quelle
Sie sind sich nicht sicher, welchen Hook Sie verwenden sollen, aber warum nicht show-allstattdessen einfach einen Funktionsaufruf ? ( org-modeist darauf aufgebaut outline-modeund es hört sich so an, als ob Sie immer wollen, dass es alles zeigt.)
Dan
(add-hook 'ediff-prepare-buffer-hook 'show-all)macht den Trick! Fügen Sie das als Antwort hinzu, @Dan? Ich bin immer noch neugierig auf lokale Variablen für ediff, aber ich denke, das show-allist die beste Lösung für mein Problem.
Ebpa

Antworten:

9

Es hört sich so an, als ob Ihr Ziel darin besteht, dass org-modeDateien immer alles anzeigen, wenn sie sich in befinden ediff. Die einfachste Lösung besteht wahrscheinlich darin, den Ansatz lokaler Variablen zu vermeiden und einfach show-allden entsprechenden Hook einzufügen, ediff-prepare-buffer-hookder ausgeführt wird, nachdem die Puffer A, B und C eingerichtet wurden:

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

Trotz des Namens org-show-allfunktioniert auch das, outline-modeworauf aufgebaut org-modeist. Im Gegensatz outline-show-alldazu zeigt es Eigenschaftsschubladen und Blöcke wie #+begin_src ... #+end_src.

org-show-allwurde in Org 9.1.6 hinzugefügt. In früheren Versionen können Sie outline-show-alloder verwenden show-all.

(Beachten Sie laut einem Kommentar, dass dies show-allin Emacs 25.1 zugunsten von veraltet ist outline-show-all. Das letztere Symbol ist in 24.5 nicht gebunden.)

Dan
quelle
Es sieht show-allso aus, als wäre es vernünftig definiert, so dass es keine Verteidigungsbedingungen im Hook benötigt und sicher in Nicht-Organisations- / Nicht-Umriss-Modi aufgerufen werden kann.
Ebpa
3
Gute Antwort. Aber show-allist seit 25.1 veraltet markiert. Besser zu benutzen outline-show-all, denke ich. (Ersteres ist nur ein Alias ​​für Letzteres.)
Harald Hanche-Olsen
@ HaraldHanche-Olsen: Danke für den Hinweis! Ich habe die Antwort bearbeitet, um sie wiederzugeben.
Dan
3

Eine weitere Option finden Sie auf der Worg- Seite. Die Grundidee ist , zu verwenden , um ediff-select-hookein Element zu entfalten , wenn bestimmte Region in ediff ausgewählt ist und Falten sie in dem Rücken ediff-unselect-hook. Der Vollständigkeit halber poste ich hier den Code

;; 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)
Iqbal Ansari
quelle