Fix followed org links not recentering correctly

Links like `file:test.cpp::45` would open file.cpp, but end up somewhere
else than line 45. Same with links like `file:test.cpp::int main()`.
This commit is contained in:
Henrik Lissner 2018-07-24 20:01:42 +02:00
parent 277915b28c
commit ebd3b0223e
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 8 additions and 4 deletions

View file

@ -60,8 +60,7 @@ If on a:
- link: follow it - link: follow it
- otherwise, refresh all inline images in current tree." - otherwise, refresh all inline images in current tree."
(interactive) (interactive)
(let* ((scroll-pt (window-start)) (let* ((context (org-element-context))
(context (org-element-context))
(type (org-element-type context))) (type (org-element-type context)))
;; skip over unimportant contexts ;; skip over unimportant contexts
(while (and context (memq type '(verbatim code bold italic underline strike-through subscript superscript))) (while (and context (memq type '(verbatim code bold italic underline strike-through subscript superscript)))
@ -127,8 +126,7 @@ If on a:
(+org/refresh-inline-images) (+org/refresh-inline-images)
(org-open-at-point)))) (org-open-at-point))))
(_ (+org/refresh-inline-images))) (_ (+org/refresh-inline-images)))))
(set-window-start nil scroll-pt)))
;;;###autoload ;;;###autoload
(defun +org/insert-item (direction) (defun +org/insert-item (direction)

View file

@ -347,6 +347,12 @@ between the two."
;; Don't open separate windows ;; Don't open separate windows
(setf (alist-get 'file org-link-frame-setup) #'find-file) (setf (alist-get 'file org-link-frame-setup) #'find-file)
(defun +org|delayed-recenter ()
"`recenter', but after a tiny delay. Necessary to prevent certain race
conditions where a window's buffer hasn't changed at the time this hook is run."
(run-at-time 0.1 nil #'recenter))
(add-hook 'org-follow-link-hook #'+org|delayed-recenter)
;; Fix variable height org-level-N faces in the eldoc string ;; Fix variable height org-level-N faces in the eldoc string
(defun +org*fix-font-size-variation-in-eldoc (orig-fn) (defun +org*fix-font-size-variation-in-eldoc (orig-fn)
(cl-letf (((symbol-function 'org-format-outline-path) (cl-letf (((symbol-function 'org-format-outline-path)