Explorar o código

Prevent duplicating calls to `org-link-search'

* lisp/org.el (org-open-at-point): Do not call twice `org-link-search'
  when destination is not accessible within the current narrowed part of
  the buffer.
Nicolas Goaziou %!s(int64=9) %!d(string=hai) anos
pai
achega
776449fd7d
Modificáronse 1 ficheiros con 16 adicións e 14 borrados
  1. 16 14
      lisp/org.el

+ 16 - 14
lisp/org.el

@@ -10827,22 +10827,24 @@ link in a property drawer line."
 		  (if (not arg) (org-mark-ring-push)
 		    (switch-to-buffer-other-window
 		     (org-get-buffer-for-internal-link (current-buffer))))
-		  (let ((cmd
-			 (if (equal type "radio")
-			     `(org-search-radio-target
-			       ,(org-element-property :path link))
-			   `(org-link-search
-			     ,(if (member type '("custom-id" "coderef"))
-				  (org-element-property :raw-link link)
-				path)
+		  (let ((destination
+			 (org-with-wide-buffer
+			  (if (equal type "radio")
+			      (org-search-radio-target
+			       (org-element-property :path link))
+			    (org-link-search
+			     (if (member type '("custom-id" "coderef"))
+				 (org-element-property :raw-link link)
+			       path)
 			     ;; Prevent fuzzy links from matching
 			     ;; themselves.
-			     ,(and (equal type "fuzzy")
-				   (+ 2
-				      (org-element-property :begin link)))))))
-		    (condition-case nil
-			(let ((org-link-search-inhibit-query t)) (eval cmd))
-		      (error (progn (widen) (eval cmd)))))))
+			     (and (equal type "fuzzy")
+				  (+ 2 (org-element-property :begin link)))))
+			  (point))))
+		    (unless (and (<= (point-min) destination)
+				 (>= (point-max) destination))
+		      (widen))
+		    (goto-char destination))))
 	       (t (browse-url-at-point))))))
 	 ;; On a footnote reference or at a footnote definition's label.
 	 ((or (eq type 'footnote-reference)