emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [WORG] How to ediff folded Org files?


From: Ratish Punnoose
Subject: Re: [O] [WORG] How to ediff folded Org files?
Date: Wed, 31 Jul 2013 23:19:34 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Thorsten Jolitz <tjolitz <at> gmail.com> writes:

> Hi List, 
> 
> many files on Worg have this startup option:
> 
> ,--------------------------
> | +STARTUP:    ... fold ...
> `--------------------------
> 
> what leads to trouble when there is a merge-conflict in (Ma)git to be
> resolved manually with e(diff), because the different versions of the
> Org-file are then presented in folded state in the ediff session, so the
> diffs are invisible.
> 
> But when I call 'show-all' or so on them, it breaks the ediff session. 
> Is there a simple trick to avoid this problem?
> 

I was searching for a similar issue and came upon this list. I have a 
slightly different solution from the ones posted so far.

When doing a diff, each org-mode buffer is fully folded.
For each diff selection, that portion of the tree for each buffer is 
expanded.
When moving to a new diff, the previous portion of the tree is collapsed and 
the area surrounding the new diff location is expanded.

Acknowledgment: Michael Brand's solution was my starting inspiration.

#+BEGIN_SRC emacs-lisp
  ;; diff hooks for org mode
  (add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element)
  (add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree)
  ;; 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"
    (if buf
        (if (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)  
    )
#+END_SRC












reply via email to

[Prev in Thread] Current Thread [Next in Thread]