emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Ratish Punnoose <ratish@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: [WORG] How to ediff folded Org files?
Date: Wed, 31 Jul 2013 23:19:34 +0000 (UTC)	[thread overview]
Message-ID: <loom.20130801T011342-572@post.gmane.org> (raw)
In-Reply-To: 87y5cwrnw9.fsf@gmail.com

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

  parent reply	other threads:[~2013-07-31 23:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-06  9:47 [WORG] How to ediff folded Org files? Thorsten Jolitz
2013-04-06 20:20 ` Marc-Oliver Ihm
2013-04-06 21:32   ` Thorsten Jolitz
2013-04-06 22:24     ` Michael Brand
2013-04-06 22:40       ` Thorsten Jolitz
2013-04-06 23:01       ` Bill White
2013-04-09  7:29       ` Christian Egli
2013-12-19 19:00       ` Michael Brand
2013-07-31 23:19 ` Ratish Punnoose [this message]
2013-08-01 14:44   ` Thorsten Jolitz
2013-08-01 15:09   ` Rémi Vanicat
2013-08-02 12:22     ` Suvayu Ali

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=loom.20130801T011342-572@post.gmane.org \
    --to=ratish@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).