diff --git a/init.el b/init.el
index bec93c4..207469b 100644
--- a/init.el
+++ b/init.el
@@ -328,6 +328,28 @@
(:map gpolonkai/pers-map
("gg" . git-gutter:update-all-windows)))))
+;; From gmane.emacs.orgmode
+;; (http://article.gmane.org/gmane.emacs.orgmode/75222)
+(defun f-ediff-org-showhide (buf command &rest cmdargs)
+ "If buffer BUF exists and in org-mode, execute COMMAND with CMDARGS."
+ (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))
+
;; Org mode
(use-package org
:ensure t
@@ -380,6 +402,8 @@
(off . "☐")
(trans . "▣")))
org-src-window-setup 'current-window)
+ (add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element)
+ (add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree)
:bind
(:map gpolonkai/pers-map
("a" . org-agenda-list)