From: Kyle Meyer <kyle@kyleam.com>
To: York Zhao <gtdplatform@gmail.com>
Cc: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: [PATCH] org-store-link: Don't roll C-u behavior into C-u C-u behavior
Date: Sun, 21 May 2017 01:47:12 -0400 [thread overview]
Message-ID: <87zie6yd5r.fsf@kyleam.com> (raw)
In-Reply-To: <CAD3zm21KWcq5CJGva40g2dsg7VG8hpPcyTxhBehSUfgB2kMB+w@mail.gmail.com>
York Zhao <gtdplatform@gmail.com> writes:
[...]
> Seems to be a reasonable solution to me. So would you go ahead and make the
> change, or, would more people need to agreed on this solution?
If there are no objections within a few days, I'll apply the following
patch to maint.
-- >8 --
Subject: [PATCH] org-store-link: Don't roll C-u behavior into C-u C-u behavior
* lisp/org.el (org-store-link): When a double C-u prefix argument is
given, do not reverse the meaning of the org-context-in-file-links
option.
* testing/lisp/test-org.el (test-org/store-link): Add tests.
This allows the user to fall back to the core link storing functions
without also reversing their org-context-in-file-links preference,
because wanting to do the former does not mean a user also wants to do
the latter.
Reported-by: York Zhao <gtdplatform@gmail.com>
<https://lists.gnu.org/archive/html/emacs-orgmode/2017-05/msg00254.html>
---
lisp/org.el | 13 ++++----
testing/lisp/test-org.el | 77 +++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 84 insertions(+), 6 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index c8bab8712..da1420f66 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9921,9 +9921,10 @@ (defun org-store-link (arg)
This link is added to `org-stored-links' and can later be inserted
into an Org buffer with `org-insert-link' (`\\[org-insert-link]').
-For some link types, a `\\[universal-argument]' prefix ARG is interpreted.
-For links to Usenet articles, ARG negates `org-gnus-prefer-web-links'.
-For file links, ARG negates `org-context-in-file-links'.
+For some link types, a `\\[universal-argument]' prefix ARG is interpreted. \
+A single
+`\\[universal-argument]' negates `org-context-in-file-links' for file links or
+`org-gnus-prefer-web-links' for links to Usenet articles.
A `\\[universal-argument] \\[universal-argument]' prefix ARG forces \
skipping storing functions that are not
@@ -10085,7 +10086,8 @@ (defun org-store-link (arg)
(abbreviate-file-name
(buffer-file-name (buffer-base-buffer)))))
;; Add a context search string
- (when (org-xor org-context-in-file-links arg)
+ (when (org-xor org-context-in-file-links
+ (equal arg '(4)))
(let* ((element (org-element-at-point))
(name (org-element-property :name element)))
(setq txt (cond
@@ -10112,7 +10114,8 @@ (defun org-store-link (arg)
(abbreviate-file-name
(buffer-file-name (buffer-base-buffer)))))
;; Add a context string.
- (when (org-xor org-context-in-file-links arg)
+ (when (org-xor org-context-in-file-links
+ (equal arg '(4)))
(setq txt (if (org-region-active-p)
(buffer-substring (region-beginning) (region-end))
(buffer-substring (point-at-bol) (point-at-eol))))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 237d7aae4..ebbea9bb0 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -2399,7 +2399,82 @@ (ert-deftest test-org/store-link ()
(org-test-with-temp-text-in-file "#+NAME: foo\nParagraph"
(let ((file (buffer-file-name)))
(equal (format "[[file:%s::foo][foo]]" file)
- (org-store-link nil)))))))
+ (org-store-link nil))))))
+ ;; Store link to Org buffer, with context.
+ (should
+ (let ((org-stored-links nil)
+ (org-id-link-to-org-use-id nil)
+ (org-context-in-file-links t))
+ (org-test-with-temp-text-in-file "* h1"
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s::*h1][h1]]" file)
+ (org-store-link nil))))))
+ ;; Store link to Org buffer, without context.
+ (should
+ (let ((org-stored-links nil)
+ (org-id-link-to-org-use-id nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "* h1"
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s][file:%s]]" file file)
+ (org-store-link nil))))))
+ ;; C-u prefix reverses `org-context-in-file-links' in Org buffer.
+ (should
+ (let ((org-stored-links nil)
+ (org-id-link-to-org-use-id nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "* h1"
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s::*h1][h1]]" file)
+ (org-store-link '(4)))))))
+ ;; A C-u C-u does *not* reverse `org-context-in-file-links' in Org
+ ;; buffer.
+ (should
+ (let ((org-stored-links nil)
+ (org-id-link-to-org-use-id nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "* h1"
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s][file:%s]]" file file)
+ (org-store-link '(16)))))))
+ ;; Store file link to non-Org buffer, with context.
+ (should
+ (let ((org-stored-links nil)
+ (org-context-in-file-links t))
+ (org-test-with-temp-text-in-file "one\n<point>two"
+ (fundamental-mode)
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s::one]]" file)
+ (org-store-link nil))))))
+ ;; Store file link to non-Org buffer, without context.
+ (should
+ (let ((org-stored-links nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "one\n<point>two"
+ (fundamental-mode)
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s][file:%s]]" file file)
+ (org-store-link nil))))))
+ ;; C-u prefix reverses `org-context-in-file-links' in non-Org
+ ;; buffer.
+ (should
+ (let ((org-stored-links nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "one\n<point>two"
+ (fundamental-mode)
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s::one]]" file)
+ (org-store-link '(4)))))))
+ ;; A C-u C-u does *not* reverse `org-context-in-file-links' in
+ ;; non-Org buffer.
+ (should
+ (let ((org-stored-links nil)
+ (org-context-in-file-links nil))
+ (org-test-with-temp-text-in-file "one\n<point>two"
+ (fundamental-mode)
+ (let ((file (buffer-file-name)))
+ (equal (format "[[file:%s][file:%s]]" file file)
+ (org-store-link '(16))))))))
\f
;;; Node Properties
--
2.13.0
next prev parent reply other threads:[~2017-05-21 5:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-20 16:02 `org-store-link' to skip link storing functions without touching `org-context-in-file-links' York Zhao
2017-05-20 22:55 ` Kyle Meyer
2017-05-21 3:09 ` York Zhao
2017-05-21 5:47 ` Kyle Meyer [this message]
2017-05-21 6:59 ` [PATCH] org-store-link: Don't roll C-u behavior into C-u C-u behavior Nicolas Goaziou
2017-05-21 18:57 ` Kyle Meyer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zie6yd5r.fsf@kyleam.com \
--to=kyle@kyleam.com \
--cc=emacs-orgmode@gnu.org \
--cc=gtdplatform@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).