emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)]
@ 2018-12-08  2:12 Allen Li
  2018-12-08  3:37 ` [PATCH] " Allen Li
  2018-12-08 10:51 ` Nicolas Goaziou
  0 siblings, 2 replies; 5+ messages in thread
From: Allen Li @ 2018-12-08  2:12 UTC (permalink / raw)
  To: Org Mode List

There's an escaping bug in Org capture:

1. emacs -Q
2. Evaluate:

(setq org-capture-templates
   '(("Z" "org-protocol capture" entry
      (file "/tmp/tmp")
      "* %?
%(let ((x \"%:annotation\")) (if (string= x \"\") \"\" (concat x
\"\\n\")))%i")))

3. Evaluate (require 'org-protocol)

4. Evaluate to simulate org protocol capture:

    (org-protocol-capture '(:template "Z" :body "foo\nbar\n"))

Causes error:

(error "Capture abort: (error Invalid use of ‘\\’ in replacement text)")

org-protocol is used in the example as that's where I encountered it,
but the bug is in org-capture proper.

Note that this works:

    (org-protocol-capture '(:template "Z" :body "foo"))

Emacs  : GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
 of 2018-07-05
Package: Org mode version 9.1.14 (9.1.14-1049-g04641c-elpaplus @
/home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)]
  2018-12-08  2:12 Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)] Allen Li
@ 2018-12-08  3:37 ` Allen Li
  2018-12-08  9:54   ` Nicolas Goaziou
  2018-12-09 23:25   ` Nicolas Goaziou
  2018-12-08 10:51 ` Nicolas Goaziou
  1 sibling, 2 replies; 5+ messages in thread
From: Allen Li @ 2018-12-08  3:37 UTC (permalink / raw)
  To: Org Mode List

[-- Attachment #1: Type: text/plain, Size: 1256 bytes --]

Attached patch fixing this.

This was caused by a bug in a feature that I did not realize existed
(prefixing each line in %i).  I have also included patches to clarify
the documentation.

On Fri, Dec 7, 2018 at 6:12 PM Allen Li <darkfeline@felesatra.moe> wrote:
>
> There's an escaping bug in Org capture:
>
> 1. emacs -Q
> 2. Evaluate:
>
> (setq org-capture-templates
>    '(("Z" "org-protocol capture" entry
>       (file "/tmp/tmp")
>       "* %?
> %(let ((x \"%:annotation\")) (if (string= x \"\") \"\" (concat x
> \"\\n\")))%i")))
>
> 3. Evaluate (require 'org-protocol)
>
> 4. Evaluate to simulate org protocol capture:
>
>     (org-protocol-capture '(:template "Z" :body "foo\nbar\n"))
>
> Causes error:
>
> (error "Capture abort: (error Invalid use of ‘\\’ in replacement text)")
>
> org-protocol is used in the example as that's where I encountered it,
> but the bug is in org-capture proper.
>
> Note that this works:
>
>     (org-protocol-capture '(:template "Z" :body "foo"))
>
> Emacs  : GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
>  of 2018-07-05
> Package: Org mode version 9.1.14 (9.1.14-1049-g04641c-elpaplus @
> /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)

[-- Attachment #2: 0002-Document-i-prefix-in-capture-templates.patch --]
[-- Type: text/x-patch, Size: 1995 bytes --]

From 9b0d43846694e0afac19289da8a4152bd0f9bd52 Mon Sep 17 00:00:00 2001
From: Allen Li <darkfeline@felesatra.moe>
Date: Fri, 7 Dec 2018 19:35:56 -0800
Subject: [PATCH 2/2] Document %i prefix in capture templates

* doc/org-manual.org (Template expansion): Fix documentation.
* lisp/org-capture.el (org-capture-templates): Fix docstring.
---
 doc/org-manual.org  | 5 +++--
 lisp/org-capture.el | 6 ++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index 3d2211474..f96c326ae 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -7390,8 +7390,9 @@ here:
 - ~%i~ ::
 
      Initial content, the region when capture is called while the
-     region is active.  The entire text will be indented like ~%i~
-     itself.
+     region is active.  If there is text before %i on the same line,
+     such as indentation, and %i is not inside a %(sexp), that prefix
+     will be added before every line in the inserted text.
 
 - ~%a~ ::
 
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 8505c2b92..745fbcd3d 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -287,8 +287,10 @@ be replaced with content and expanded:
               with `org-capture-use-agenda-date' set.
   %T          Time stamp as above, with date and time.
   %u, %U      Like the above, but inactive time stamps.
-  %i          Initial content, copied from the active region.  If %i is
-              indented, the entire inserted text will be indented as well.
+  %i          Initial content, copied from the active region.  If
+              there is text before %i on the same line, such as
+              indentation, and %i is not inside a %(sexp), that prefix
+              will be added before every line in the inserted text.
   %a          Annotation, normally the link created with `org-store-link'.
   %A          Like %a, but prompt for the description part.
   %l          Like %a, but only insert the literal link.
-- 
2.19.2


[-- Attachment #3: 0001-org-capture-Quote-regexp-for-initial-content-prefix.patch --]
[-- Type: text/x-patch, Size: 901 bytes --]

From 4ac40f705f615105c208fcfa6e169ed08af153cf Mon Sep 17 00:00:00 2001
From: Allen Li <darkfeline@felesatra.moe>
Date: Fri, 7 Dec 2018 19:27:12 -0800
Subject: [PATCH 1/2] org-capture: Quote regexp for initial content prefix

* lisp/org-capture.el (org-capture-fill-template): Quote initial
  content lead.
---
 lisp/org-capture.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 2d72c39fd..8505c2b92 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -1673,7 +1673,7 @@ The template may still contain \"%?\" for cursor positioning."
 			     (let ((lead (buffer-substring-no-properties
 					  (line-beginning-position) (point))))
 			       (replace-regexp-in-string "\n\\(.\\)"
-							 (concat lead "\\1")
+							 (concat (regexp-quote lead) "\\1")
 							 v-i nil nil 1))))
 			  (?a v-a)
 			  (?A v-A)
-- 
2.19.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)]
  2018-12-08  3:37 ` [PATCH] " Allen Li
@ 2018-12-08  9:54   ` Nicolas Goaziou
  2018-12-09 23:25   ` Nicolas Goaziou
  1 sibling, 0 replies; 5+ messages in thread
From: Nicolas Goaziou @ 2018-12-08  9:54 UTC (permalink / raw)
  To: Allen Li; +Cc: Org Mode List

Hello,

Allen Li <darkfeline@felesatra.moe> writes:

> Attached patch fixing this.
>
> This was caused by a bug in a feature that I did not realize existed
> (prefixing each line in %i).  I have also included patches to clarify
> the documentation.

Thank you.

However, with the documentation patch, along with your past
contributions, you would be over the limit allowed for tiny changes.
IOW, you need to sign FSF papers so that we can apply it.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)]
  2018-12-08  2:12 Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)] Allen Li
  2018-12-08  3:37 ` [PATCH] " Allen Li
@ 2018-12-08 10:51 ` Nicolas Goaziou
  1 sibling, 0 replies; 5+ messages in thread
From: Nicolas Goaziou @ 2018-12-08 10:51 UTC (permalink / raw)
  To: Allen Li; +Cc: Org Mode List

Hello,

Allen Li <darkfeline@felesatra.moe> writes:

> There's an escaping bug in Org capture:
>
> 1. emacs -Q
> 2. Evaluate:
>
> (setq org-capture-templates
>    '(("Z" "org-protocol capture" entry
>       (file "/tmp/tmp")
>       "* %?
> %(let ((x \"%:annotation\")) (if (string= x \"\") \"\" (concat x
> \"\\n\")))%i")))
>
> 3. Evaluate (require 'org-protocol)
>
> 4. Evaluate to simulate org protocol capture:
>
>     (org-protocol-capture '(:template "Z" :body "foo\nbar\n"))
>
> Causes error:
>
> (error "Capture abort: (error Invalid use of ‘\\’ in replacement
> text)")

Fixed. Thank you.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)]
  2018-12-08  3:37 ` [PATCH] " Allen Li
  2018-12-08  9:54   ` Nicolas Goaziou
@ 2018-12-09 23:25   ` Nicolas Goaziou
  1 sibling, 0 replies; 5+ messages in thread
From: Nicolas Goaziou @ 2018-12-09 23:25 UTC (permalink / raw)
  To: Allen Li; +Cc: Org Mode List

Hello,

Allen Li <darkfeline@felesatra.moe> writes:

> Attached patch fixing this.
>
> This was caused by a bug in a feature that I did not realize existed
> (prefixing each line in %i).  I have also included patches to clarify
> the documentation.

I applied the documentation patch. Thank you.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-12-09 23:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-08  2:12 Bug: Org capture: Invalid use of ‘\’ in replacement text [9.1.14 (9.1.14-1049-g04641c-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20181203/)] Allen Li
2018-12-08  3:37 ` [PATCH] " Allen Li
2018-12-08  9:54   ` Nicolas Goaziou
2018-12-09 23:25   ` Nicolas Goaziou
2018-12-08 10:51 ` Nicolas Goaziou

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).