9da3ffee41
This is a massive diff that I had to do in a hurry - when leaving Urbint. I'm pretty sure that most of these are updating Emacs packages, but I'm not positive.
37 lines
1.3 KiB
EmacsLisp
37 lines
1.3 KiB
EmacsLisp
(declare-function org-in-src-block-p "org")
|
|
|
|
(defmacro evil-commentary/org-babel-do-in-edit-buffer (beg end &rest body)
|
|
"Do `org-babel-do-in-edit-buffer' and restore view.
|
|
|
|
Return the same value as `org-babel-do-in-edit-buffer'. Save top
|
|
line of current window and restore it if sucess."
|
|
(declare (indent defun))
|
|
`(when (and (fboundp 'org-babel-do-in-edit-buffer)
|
|
(org-in-src-block-p t))
|
|
(let ((top-line (line-number-at-pos (window-start)))
|
|
(current-point (point))
|
|
found)
|
|
(push-mark ,beg)
|
|
(goto-char ,end)
|
|
(setq mark-active t)
|
|
(setq found (eval '(org-babel-do-in-edit-buffer
|
|
,@body)))
|
|
(pop-mark)
|
|
(if (not found)
|
|
(goto-char current-point)
|
|
(save-excursion
|
|
(scroll-up 1) ; stupid fix
|
|
(goto-char (point-min))
|
|
(forward-line (1- top-line))
|
|
(recenter 0)))
|
|
found)))
|
|
|
|
;;;###autoload
|
|
(defun evil-commentary/org-comment-or-uncomment-region (beg end)
|
|
"Comment function for `org-mode'."
|
|
(interactive "r")
|
|
(unless (evil-commentary/org-babel-do-in-edit-buffer beg end
|
|
(call-interactively 'evil-commentary))
|
|
(comment-or-uncomment-region beg end)))
|
|
|
|
(provide 'evil-commentary-integration)
|