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)