summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2015-10-31 23:32:47 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2016-05-31 23:34:00 +0200
commit21ba5f510ede30b74e8aa5878a659266ed21c25b (patch)
tree3944d5a59f73144a3b97214f407ca76b6bf2005b
parentddd58ff99a8684f6bcae24ffa5050857f533e26d (diff)
downloadorg-mode-21ba5f510ede30b74e8aa5878a659266ed21c25b.tar.gz
Refuse to follow link right after the link
* lisp/org.el (org-open-at-point): (org-return): Refuse to follow link right after the link. * testing/lisp/test-org.el (test-org/return): Add tests. (test-org/coderef): (test-org/custom-id): (test-org/fuzzy-links): Update tests. Reported-by: "Stefan-W. Hahn" <stefan.hahn@s-hahn.de> <http://permalink.gmane.org/gmane.emacs.orgmode/102054>
-rw-r--r--lisp/org.el26
-rw-r--r--testing/lisp/test-org.el27
2 files changed, 34 insertions, 19 deletions
diff --git a/lisp/org.el b/lisp/org.el
index e4edcf4..1f49936 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -10707,7 +10707,8 @@ link in a property drawer line."
((memq type '(comment comment-block keyword node-property))
(cond ((org-in-regexp org-any-link-re)
(org-open-link-from-string (match-string-no-properties 0)))
- ((or (org-at-timestamp-p t) (org-at-date-range-p t))
+ ((or (org-in-regexp org-ts-regexp-both nil t)
+ (org-in-regexp org-tsr-regexp-both nil t))
(org-follow-timestamp-link))
(t (user-error "No link found"))))
;; On a headline or an inlinetask, but not on a timestamp,
@@ -10735,13 +10736,12 @@ link in a property drawer line."
(>= (point) (org-element-property :begin value))
(<= (point) (org-element-property :end value)))
(org-follow-timestamp-link))
- ;; Do nothing on white spaces after an object, unless point
- ;; is right after it.
- ((> (point)
- (save-excursion
- (goto-char (org-element-property :end context))
- (skip-chars-backward " \t")
- (point)))
+ ;; Do nothing on white spaces after an object.
+ ((>= (point)
+ (save-excursion
+ (goto-char (org-element-property :end context))
+ (skip-chars-backward " \t")
+ (point)))
(user-error "No link found"))
((eq type 'timestamp) (org-follow-timestamp-link))
;; On tags within a headline or an inlinetask.
@@ -21380,13 +21380,13 @@ object (e.g., within a comment). In these case, you need to use
(org-element-lineage context '(table-row table-cell) t))
(org-table-justify-field-maybe)
(call-interactively #'org-table-next-row))
- ;; On a link or a timestamp, call `org-open-line' if
+ ;; On a link or a timestamp, call `org-open-at-point' if
;; `org-return-follows-link' allows it. Tolerate fuzzy
- ;; locations, e.g., in a comment, as `org-open-line'.
+ ;; locations, e.g., in a comment, as `org-open-at-point'.
((and org-return-follows-link
- (or (org-at-timestamp-p t)
- (org-at-date-range-p t)
- (org-in-regexp org-any-link-re)))
+ (or (org-in-regexp org-ts-regexp-both nil t)
+ (org-in-regexp org-tsr-regexp-both nil t)
+ (org-in-regexp org-any-link-re nil t)))
(call-interactively #'org-open-at-point))
;; Insert newline in heading, but preserve tags.
((and (not (bolp))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 73245b4..69a2629 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -914,6 +914,12 @@
(org-link-search-must-match-exact-headline nil))
(org-return))
(org-looking-at-p "<<target>>")))
+ (should-not
+ (org-test-with-temp-text "Link [[target]]<point> <<target>>"
+ (let ((org-return-follows-link t)
+ (org-link-search-must-match-exact-headline nil))
+ (org-return))
+ (org-looking-at-p "<<target>>")))
;; When `org-return-follows-link' is non-nil, tolerate links and
;; timestamps in comments, node properties, etc.
(should
@@ -922,6 +928,16 @@
(org-link-search-must-match-exact-headline nil))
(org-return))
(org-looking-at-p "<<target>>")))
+ (should-not
+ (org-test-with-temp-text "# Comment [[target<point>]]\n <<target>>"
+ (let ((org-return-follows-link nil)) (org-return))
+ (org-looking-at-p "<<target>>")))
+ (should-not
+ (org-test-with-temp-text "# Comment [[target]]<point>\n <<target>>"
+ (let ((org-return-follows-link t)
+ (org-link-search-must-match-exact-headline nil))
+ (org-return))
+ (org-looking-at-p "<<target>>")))
;; However, do not open link when point is in a table.
(should
(org-test-with-temp-text "| [[target<point>]] |\n| between |\n| <<target>> |"
@@ -1603,7 +1619,7 @@
#+BEGIN_SRC emacs-lisp
\(+ 1 1) (ref:sc)
#+END_SRC
-\[[(sc)]]<point>"
+\[[(sc)<point>]]"
(org-open-at-point)
(looking-at "(ref:sc)")))
;; Find coderef even with alternate label format.
@@ -1612,7 +1628,7 @@
#+BEGIN_SRC emacs-lisp -l \"{ref:%s}\"
\(+ 1 1) {ref:sc}
#+END_SRC
-\[[(sc)]]<point>"
+\[[(sc)<point>]]"
(org-open-at-point)
(looking-at "{ref:sc}"))))
@@ -1622,13 +1638,13 @@
"Test custom ID links specifications."
(should
(org-test-with-temp-text
- "* H1\n:PROPERTIES:\n:CUSTOM_ID: custom\n:END:\n* H2\n[[#custom]]<point>"
+ "* H1\n:PROPERTIES:\n:CUSTOM_ID: custom\n:END:\n* H2\n[[#custom<point>]]"
(org-open-at-point)
(org-looking-at-p "\\* H1")))
;; Throw an error on false positives.
(should-error
(org-test-with-temp-text
- "* H1\n:DRAWER:\n:CUSTOM_ID: custom\n:END:\n* H2\n[[#custom]]<point>"
+ "* H1\n:DRAWER:\n:CUSTOM_ID: custom\n:END:\n* H2\n[[#custom<point>]]"
(org-open-at-point)
(org-looking-at-p "\\* H1"))))
@@ -1702,8 +1718,7 @@
(looking-at "\\* COMMENT Test")))
;; Correctly un-hexify fuzzy links.
(should
- (org-test-with-temp-text "* With space\n[[*With%20space][With space]]"
- (goto-char (point-max))
+ (org-test-with-temp-text "* With space\n[[*With%20space][With space<point>]]"
(org-open-at-point)
(bobp))))