org-footnote: Offer to widen buffer when trying to move to a definiton master
authorNicolas Goaziou <mail@nicolasgoaziou.fr>
Sat, 2 May 2015 13:56:42 +0000 (15:56 +0200)
committerNicolas Goaziou <mail@nicolasgoaziou.fr>
Sat, 2 May 2015 14:45:54 +0000 (16:45 +0200)
* lisp/org-footnote.el (org-footnote-action): Offer to widen buffer if
  definition is outside of narrow part of buffer.

lisp/org-footnote.el

index 2125cb5..f4c3f7e 100644 (file)
@@ -641,8 +641,20 @@ offer additional commands in a menu."
         ;; definition.
         ((not label)
          (goto-char (org-element-property :contents-begin context)))
-        ;; A definition exists: move to it.
-        ((ignore-errors (org-footnote-goto-definition label)))
+        ;; A definition exists: move to it, if possible, or offer to
+        ;; widen buffer to reach it.
+        ((let ((definition (org-footnote-get-definition label)))
+           (when definition
+             (let ((begin (nth 1 definition)))
+               (catch 'do-nothing
+                 (cond ((and (>= begin (point-min)) (<= begin (point-max))))
+                       ((yes-or-no-p "Definition outside scope.  Widen? ")
+                        (widen))
+                       (t (throw 'do-nothing nil)))
+                 (goto-char begin)
+                 (search-forward label)
+                 (forward-char)
+                 t)))))
         ;; No definition exists: offer to create it.
         ((yes-or-no-p (format "No definition for %s.  Create one? " label))
          (org-footnote-create-definition label)))))