* Org campture recursively expands %-escapes
@ 2015-11-21 22:06 Thomas Preindl
2015-11-26 12:54 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Thomas Preindl @ 2015-11-21 22:06 UTC (permalink / raw)
To: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 827 bytes --]
Hi everyone,
setting up my capture templates to work with a new Chrome extension I
noticed that when i mark some text containing %-escapes inserted with the
'%i' in the template the %-escape was
evaluated.
For example, marking %(print (buffer-name)) will be replaced with
"*Capture*".
I am now wondering if this is intended or not and if this could be
used as a kind of exploit to run code if someone captures code
from a website.
Is there a way to prevent this? I thought about escaping the string, but I
would have to change the chrome extension or maybe is it possible to escape
it somehow in the template?
Here is my template:
("p" "org-protocol-Ch-marked" entry (file refile-path)
"* %:description\n %U\n %:link\n #+BEGIN_QUOTE\n %i\n
#+END_QUOTE" :immediate-finish t :empty-lines-after 1)
br,
Thomas
[-- Attachment #2: Type: text/html, Size: 1139 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-21 22:06 Org campture recursively expands %-escapes Thomas Preindl
@ 2015-11-26 12:54 ` Nicolas Goaziou
2015-11-26 18:52 ` Samuel Wales
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2015-11-26 12:54 UTC (permalink / raw)
To: Thomas Preindl; +Cc: emacs-orgmode
Hello,
Thomas Preindl <thomas.preindl@gmail.com> writes:
> setting up my capture templates to work with a new Chrome extension I
> noticed that when i mark some text containing %-escapes inserted with the
> '%i' in the template the %-escape was
> evaluated.
>
> For example, marking %(print (buffer-name)) will be replaced with
> "*Capture*".
>
> I am now wondering if this is intended or not and if this could be
> used as a kind of exploit to run code if someone captures code
> from a website.
Judging from `org-capture-fill-template', this is a feature. Worse,
%(...) placeholders, the most dangerous ones, are always expanded last.
I guess the intent is to fill the Sexp with previous placeholders and
then eval it for a proper result (see, e.g., `org-capture-template's
docstring).
One solution would be to expand recursively Sexp placeholders at the
beginning of `org-capture-fill-template', right after expanding
properties placeholders (i.e., %:property), so as to limit the problem.
We could also remove recursivity for placeholders altogether. It is
buggy anyway (e.g., if a property placeholder introduces another
placeholder, the latter is not expanded).
Question to the ML: is there anyone relying on placeholder recursion?
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-26 12:54 ` Nicolas Goaziou
@ 2015-11-26 18:52 ` Samuel Wales
2015-11-26 22:02 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Samuel Wales @ 2015-11-26 18:52 UTC (permalink / raw)
To: Thomas Preindl, emacs-orgmode
just to clarify,
"%(alpha-org-protocol-string \"%:link\" \"%:description\" \"%i\")"
is not recursive, right?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-26 18:52 ` Samuel Wales
@ 2015-11-26 22:02 ` Nicolas Goaziou
2015-11-26 22:10 ` Samuel Wales
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2015-11-26 22:02 UTC (permalink / raw)
To: Samuel Wales; +Cc: Thomas Preindl, emacs-orgmode
Hello,
Samuel Wales <samologist@gmail.com> writes:
> just to clarify,
>
> "%(alpha-org-protocol-string \"%:link\" \"%:description\" \"%i\")"
>
> is not recursive, right?
It is.
The first two are documented in org-capture-templates' docstring. So
I guess they are fine. However, the last parameter is problematic. As
pointed out by the OP, since it basically means "%(...)" are evaluated
after "%i", it can lead to the following chain of events:
%i => %(evil-command) => Evil result.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-26 22:02 ` Nicolas Goaziou
@ 2015-11-26 22:10 ` Samuel Wales
2015-11-26 23:02 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Samuel Wales @ 2015-11-26 22:10 UTC (permalink / raw)
To: Samuel Wales, Thomas Preindl, emacs-orgmode
On 11/26/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> Samuel Wales <samologist@gmail.com> writes:
>> just to clarify,
>>
>> "%(alpha-org-protocol-string \"%:link\" \"%:description\" \"%i\")"
>>
>> is not recursive, right?
>
> It is.
the above is the only way i was able to get org-protocol to do what i needed.
> The first two are documented in org-capture-templates' docstring. So
> I guess they are fine. However, the last parameter is problematic. As
> pointed out by the OP, since it basically means "%(...)" are evaluated
> after "%i", it can lead to the following chain of events:
>
> %i => %(evil-command) => Evil result.
i think i understand. maybe we need another way to pass %i.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-26 22:10 ` Samuel Wales
@ 2015-11-26 23:02 ` Nicolas Goaziou
2015-11-29 16:00 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2015-11-26 23:02 UTC (permalink / raw)
To: Samuel Wales; +Cc: Thomas Preindl, emacs-orgmode
Samuel Wales <samologist@gmail.com> writes:
> the above is the only way i was able to get org-protocol to do what
> i needed.
OK.
> i think i understand. maybe we need another way to pass %i.
I guess we could restict "%()" evaluation to the Sexp defined in the
initial template.
Regards,
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-26 23:02 ` Nicolas Goaziou
@ 2015-11-29 16:00 ` Nicolas Goaziou
2016-01-03 11:44 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2015-11-29 16:00 UTC (permalink / raw)
To: Samuel Wales; +Cc: Thomas Preindl, emacs-orgmode
>> i think i understand. maybe we need another way to pass %i.
>
> I guess we could restict "%()" evaluation to the Sexp defined in the
> initial template.
I committed a patch along those lines in master. Please let me know if
anything goes wrong with capture templates.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2015-11-29 16:00 ` Nicolas Goaziou
@ 2016-01-03 11:44 ` Michael Brand
2016-01-03 19:51 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-03 11:44 UTC (permalink / raw)
To: Org Mode; +Cc: Thomas Preindl
[-- Attachment #1: Type: text/plain, Size: 865 bytes --]
Hi Nicolas
On Sun, Nov 29, 2015 at 5:00 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
> I committed a patch along those lines in master. Please let me know if
> anything goes wrong with capture templates.
release_8.3.2-350-gbd3a2cb introduces a regression of "%()" in Org
feed templates. See
- commit release_7.8.10-1057-g042db37
- (commit release_7.8.10-1068-ge1d5a31)
- http://thread.gmane.org/gmane.emacs.orgmode/56991
I just wrote an ERT for this functionality, can you please add it?:
(should
(string=
"5 % Less (See\n Item \"3)\" Somewhere)\n Of THE [[http://orgmode.org]]\n
[2016-01-02 Sat]"
(org-feed-format-entry
'(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
:link "http://ORGMODE.org" ; %a
:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
"%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
nil)))
Michael
[-- Attachment #2: Type: text/html, Size: 1273 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-03 11:44 ` Michael Brand
@ 2016-01-03 19:51 ` Nicolas Goaziou
2016-01-03 20:39 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-03 19:51 UTC (permalink / raw)
To: Michael Brand; +Cc: Thomas Preindl, Org Mode
Hello,
Michael Brand <michael.ch.brand@gmail.com> writes:
> release_8.3.2-350-gbd3a2cb introduces a regression of "%()" in Org
> feed templates. See
> - commit release_7.8.10-1057-g042db37
> - (commit release_7.8.10-1068-ge1d5a31)
> - http://thread.gmane.org/gmane.emacs.orgmode/56991
>
> I just wrote an ERT for this functionality, can you please add it?:
>
> (should
> (string=
> "5 % Less (See\n Item \"3)\" Somewhere)\n Of THE [[http://orgmode.org]]\n
> [2016-01-02 Sat]"
> (org-feed-format-entry
> '(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
> :link "http://ORGMODE.org" ; %a
> :pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
> "%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
> nil)))
I read the thread but I'm not sure where the regression is. Could you
elaborate on what is failing here?
Thank you.
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-03 19:51 ` Nicolas Goaziou
@ 2016-01-03 20:39 ` Michael Brand
2016-01-03 21:07 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-03 20:39 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1: Type: text/plain, Size: 1108 bytes --]
Hi Nicolas
On Sun, Jan 3, 2016 at 8:51 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
> > release_8.3.2-350-gbd3a2cb introduces a regression of "%()" in Org
> > feed templates. See
> > - commit release_7.8.10-1057-g042db37
> > - (commit release_7.8.10-1068-ge1d5a31)
> > - http://thread.gmane.org/gmane.emacs.orgmode/56991
> >
> > I just wrote an ERT for this functionality, can you please add it?:
> >
> > (should
> > (string=
> > "5 % Less (See\n Item \"3)\" Somewhere)\n Of THE [[http://orgmode.org
]]\n
> > [2016-01-02 Sat]"
> > (org-feed-format-entry
> > '(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
> > :link "http://ORGMODE.org" ; %a
> > :pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
> > "%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
> > nil)))
>
> I read the thread but I'm not sure where the regression is. Could you
> elaborate on what is failing here?
The above ERT that I would like to be added succeeds on
release_8.3.2-349-gbd79085 and fails on release_8.3.2-350-gbd3a2cb.
Michael
[-- Attachment #2: Type: text/html, Size: 1721 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-03 20:39 ` Michael Brand
@ 2016-01-03 21:07 ` Nicolas Goaziou
2016-01-04 1:52 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-03 21:07 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Michael Brand <michael.ch.brand@gmail.com> writes:
> On Sun, Jan 3, 2016 at 8:51 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
> wrote:
>>
>> Michael Brand <michael.ch.brand@gmail.com> writes:
>>
>> > release_8.3.2-350-gbd3a2cb introduces a regression of "%()" in Org
>> > feed templates. See
>> > - commit release_7.8.10-1057-g042db37
>> > - (commit release_7.8.10-1068-ge1d5a31)
>> > - http://thread.gmane.org/gmane.emacs.orgmode/56991
>> >
>> > I just wrote an ERT for this functionality, can you please add it?:
>> >
>> > (should
>> > (string=
>> > "5 % Less (See\n Item \"3)\" Somewhere)\n Of THE [[http://orgmode.org
> ]]\n
>> > [2016-01-02 Sat]"
>> > (org-feed-format-entry
>> > '(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
>> > :link "http://ORGMODE.org" ; %a
>> > :pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
>> > "%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
>> > nil)))
>>
>> I read the thread but I'm not sure where the regression is. Could you
>> elaborate on what is failing here?
>
> The above ERT that I would like to be added succeeds on
> release_8.3.2-349-gbd79085 and fails on release_8.3.2-350-gbd3a2cb.
The only error I get is a difference of indentation before the date. Am
I missing something ?
Regards,
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-03 21:07 ` Nicolas Goaziou
@ 2016-01-04 1:52 ` Michael Brand
2016-01-05 23:39 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-04 1:52 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1: Type: text/plain, Size: 1017 bytes --]
Hi Nicolas
On Sun, Jan 3, 2016 at 10:07 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
> The only error I get is a difference of indentation before the date. Am
> I missing something ?
When you evaluate
(progn
(require 'org-feed)
(org-feed-format-entry
'(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
:link "http://ORGMODE.org" ; %a
:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
"%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
nil))
do you get the expected "Lisp error: (void-function
org-capture-expand-embedded-elisp)" like me on
release_8.3.2-350-gbd3a2cb and today's release_8.3.2-441-ga87dea3 ?
If not I don't understand what is wrong with my git repo.
(After a rename I get
"%(capitalize \"5 % less (see
item \\\"3)\\\" somewhere)
of\") THE %(downcase \"[[http://ORGMODE.org]]
\") [2016-01-02 Sat]"
and on release_8.3.2-349-gbd79085 I get the expanded
"5 % Less (See
Item \"3)\" Somewhere)
Of THE [[http://orgmode.org]]
[2016-01-02 Sat]"
)
Michael
[-- Attachment #2: Type: text/html, Size: 1495 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-04 1:52 ` Michael Brand
@ 2016-01-05 23:39 ` Nicolas Goaziou
2016-01-06 5:45 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-05 23:39 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Michael Brand <michael.ch.brand@gmail.com> writes:
> When you evaluate
>
> (progn
> (require 'org-feed)
> (org-feed-format-entry
> '(:title "5 % less (see\n item \"3)\" somewhere)" ; %h
> :link "http://ORGMODE.org" ; %a
> :pubDate "Sat, 02 Jan 2016 12:00:00 +0000") ; %u
> "%(capitalize \"%h\n of\") THE %(downcase \"%a\") %u"
> nil))
>
> do you get the expected "Lisp error: (void-function
> org-capture-expand-embedded-elisp)" like me on
> release_8.3.2-350-gbd3a2cb and today's release_8.3.2-441-ga87dea3 ?
I do. Somehow, I didn't see this before. This is because I renamed
`org-capture-expand-embedded-elisp' into
`org-capture--expand-embedded-elisp'.
However, ISTM there is some code duplication between
`org-feed-format-entry' and `org-capture-fill-template'. Is calling
`org-capture-expand-embedded-elisp' from the former the right thing to
do?
Regards,
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-05 23:39 ` Nicolas Goaziou
@ 2016-01-06 5:45 ` Michael Brand
2016-01-07 16:35 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-06 5:45 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1: Type: text/plain, Size: 771 bytes --]
Hi Nicolas
On Wed, Jan 6, 2016 at 12:39 AM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
> I do. Somehow, I didn't see this before. This is because I renamed
> `org-capture-expand-embedded-elisp' into
> `org-capture--expand-embedded-elisp'.
>
> However, ISTM there is some code duplication between
> `org-feed-format-entry' and `org-capture-fill-template'. Is calling
> `org-capture-expand-embedded-elisp' from the former the right thing to
> do?
I don't really know. It was only my choice of how to avoid code
duplication between `org-feed-format-entry' and
`org-capture-fill-template' according to
http://thread.gmane.org/gmane.emacs.orgmode/56991/focus=57265
and with lack of better knowledge from my side. If there is a better
solution please go ahead.
Michael
[-- Attachment #2: Type: text/html, Size: 1040 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-06 5:45 ` Michael Brand
@ 2016-01-07 16:35 ` Nicolas Goaziou
2016-01-08 20:59 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-07 16:35 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Hello,
Michael Brand <michael.ch.brand@gmail.com> writes:
> I don't really know. It was only my choice of how to avoid code
> duplication between `org-feed-format-entry' and
> `org-capture-fill-template' according to
> http://thread.gmane.org/gmane.emacs.orgmode/56991/focus=57265
> and with lack of better knowledge from my side. If there is a better
> solution please go ahead.
For now, I left some code duplication. The issue is, hopefully, fixed,
however.
I didn't add your ert, but if you provide a patch with
a "test-org-feed.el" file, I can add it. It would be best to split the
test into small ones, though, as it seems you're testing multiple things
at once.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-07 16:35 ` Nicolas Goaziou
@ 2016-01-08 20:59 ` Michael Brand
2016-01-08 22:44 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-08 20:59 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1: Type: text/plain, Size: 1061 bytes --]
Hi Nicolas
On Thu, Jan 7, 2016 at 5:35 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
> For now, I left some code duplication. The issue is, hopefully, fixed,
> however.
It is, thank you!
> I didn't add your ert, but if you provide a patch with
> a "test-org-feed.el" file, I can add it. It would be best to split the
> test into small ones, though, as it seems you're testing multiple things
> at once.
I'm porting test-org-capture.el to test-org-feed.el and found this
issue in org-feed-format-entry: Evaluation of
(org-feed-format-entry '(:title "success!") "\\\\%h" nil)
with Emacs 24.5 results in "Lisp error: (args-out-of-range #<buffer
*temp*> 4 5)". The Lisp error disappears when single stepping with
Edebug but then org-feed-format-entry returns "\\%h" instead of the
expected "\\success!". To my understanding the problem seems to be
that org-capture-escaped-% messes up the match data which leads to an
empty variable with the name "replacement". I wonder why this problem
is not showing up in org-capture-fill-template too.
Michael
[-- Attachment #2: Type: text/html, Size: 1324 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-08 20:59 ` Michael Brand
@ 2016-01-08 22:44 ` Nicolas Goaziou
2016-01-09 15:53 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-08 22:44 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Michael Brand <michael.ch.brand@gmail.com> writes:
> I'm porting test-org-capture.el to test-org-feed.el and found this
> issue in org-feed-format-entry: Evaluation of
>
> (org-feed-format-entry '(:title "success!") "\\\\%h" nil)
>
> with Emacs 24.5 results in "Lisp error: (args-out-of-range #<buffer
> *temp*> 4 5)". The Lisp error disappears when single stepping with
> Edebug but then org-feed-format-entry returns "\\%h" instead of the
> expected "\\success!". To my understanding the problem seems to be
> that org-capture-escaped-% messes up the match data which leads to an
> empty variable with the name "replacement". I wonder why this problem
> is not showing up in org-capture-fill-template too.
Fixed, too. Thank you.
Regards,
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-08 22:44 ` Nicolas Goaziou
@ 2016-01-09 15:53 ` Michael Brand
2016-01-09 16:05 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-09 15:53 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1: Type: text/plain, Size: 1157 bytes --]
Hi Nicolas
On Fri, Jan 8, 2016 at 11:44 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
> > I'm porting test-org-capture.el to test-org-feed.el and found this
> > issue in org-feed-format-entry: Evaluation of
> >
> > (org-feed-format-entry '(:title "success!") "\\\\%h" nil)
> >
> > with Emacs 24.5 results in "Lisp error: (args-out-of-range #<buffer
> > *temp*> 4 5)". The Lisp error disappears when single stepping with
> > Edebug but then org-feed-format-entry returns "\\%h" instead of the
> > expected "\\success!". To my understanding the problem seems to be
> > that org-capture-escaped-% messes up the match data which leads to an
> > empty variable with the name "replacement". I wonder why this problem
> > is not showing up in org-capture-fill-template too.
>
> Fixed, too. Thank you.
Yes, thank you.
On the other hand commit release_8.3.3-415-ge2fbaee breaks the ERT
that I suggested in this thread or its simplification here:
(progn
(require 'org-feed)
(equal "\"A)" (org-feed-format-entry
'(:title "\"a)") "%(capitalize \"%h\")" nil)))
Michael
[-- Attachment #2: Type: text/html, Size: 1628 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-09 15:53 ` Michael Brand
@ 2016-01-09 16:05 ` Nicolas Goaziou
2016-01-09 16:31 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-09 16:05 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Hello,
Michael Brand <michael.ch.brand@gmail.com> writes:
> On the other hand commit release_8.3.3-415-ge2fbaee breaks the ERT
> that I suggested in this thread or its simplification here:
>
> (progn
> (require 'org-feed)
> (equal "\"A)" (org-feed-format-entry
> '(:title "\"a)") "%(capitalize \"%h\")" nil)))
Hopefully, this is now fixed in master.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-09 16:05 ` Nicolas Goaziou
@ 2016-01-09 16:31 ` Michael Brand
2016-01-09 17:54 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-09 16:31 UTC (permalink / raw)
To: Michael Brand, Org Mode
[-- Attachment #1: Type: text/plain, Size: 1118 bytes --]
Hi Nicolas
On Sat, Jan 9, 2016 at 5:05 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
> > On the other hand commit release_8.3.3-415-ge2fbaee breaks the ERT
> > that I suggested in this thread or its simplification here:
> >
> > (progn
> > (require 'org-feed)
> > (equal "\"A)" (org-feed-format-entry
> > '(:title "\"a)") "%(capitalize \"%h\")" nil)))
>
> Hopefully, this is now fixed in master.
It is, thank you. Incredibly fast 11 minutes from my report to your
commit!
My current ERT for test-org-feed.el
(equal
"5 % Less (See\n Item \"3)\" Somewhere)"
(org-feed-format-entry
'(:title "5 % less (see\n item \"3)\" somewhere)")
"%(capitalize \"%h\")" nil))
works now too. What does not work yet is my backport of the above ERT
to test-org-capture.el:
(equal
"5 % Less (See\n Item \"3)\" Somewhere)\n"
(let ((org-store-link-plist nil))
(org-capture-fill-template
"%(capitalize \"%i\")"
"5 % less (see\n item \"3)\" somewhere)")))
Am I doing something wrong?
Michael
[-- Attachment #2: Type: text/html, Size: 1674 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-09 16:31 ` Michael Brand
@ 2016-01-09 17:54 ` Nicolas Goaziou
2016-01-10 8:08 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-09 17:54 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Michael Brand <michael.ch.brand@gmail.com> writes:
> My current ERT for test-org-feed.el
>
> (equal
> "5 % Less (See\n Item \"3)\" Somewhere)"
> (org-feed-format-entry
> '(:title "5 % less (see\n item \"3)\" somewhere)")
> "%(capitalize \"%h\")" nil))
>
> works now too. What does not work yet is my backport of the above ERT
> to test-org-capture.el:
>
> (equal
> "5 % Less (See\n Item \"3)\" Somewhere)\n"
> (let ((org-store-link-plist nil))
> (org-capture-fill-template
> "%(capitalize \"%i\")"
> "5 % less (see\n item \"3)\" somewhere)")))
>
> Am I doing something wrong?
I think you're mis-using "%i" place-holder. One feature is to repeat the
leading text, so that, when you write, for example "> %i", "> " is
repeated every line.
Regards,
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-09 17:54 ` Nicolas Goaziou
@ 2016-01-10 8:08 ` Michael Brand
2016-01-11 23:05 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-10 8:08 UTC (permalink / raw)
To: Org Mode
[-- Attachment #1.1: Type: text/plain, Size: 1434 bytes --]
Hi Nicolas
On Sat, Jan 9, 2016 at 6:54 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr>
wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
> > My current ERT for test-org-feed.el
> >
> > (equal
> > "5 % Less (See\n Item \"3)\" Somewhere)"
> > (org-feed-format-entry
> > '(:title "5 % less (see\n item \"3)\" somewhere)")
> > "%(capitalize \"%h\")" nil))
> >
> > works now too. What does not work yet is my backport of the above ERT
> > to test-org-capture.el:
> >
> > (equal
> > "5 % Less (See\n Item \"3)\" Somewhere)\n"
> > (let ((org-store-link-plist nil))
> > (org-capture-fill-template
> > "%(capitalize \"%i\")"
> > "5 % less (see\n item \"3)\" somewhere)")))
> >
> > Am I doing something wrong?
>
> I think you're mis-using "%i" place-holder. One feature is to repeat the
> leading text, so that, when you write, for example "> %i", "> " is
> repeated every line.
Indeed. After removing the "\n" from the input of the capture ERT it
works too.
I would like to push the attached change to add some ERTs with the
commit msg below and would like to ask you for a review first.
Michael
----------------------------------------
Add ERTs for feed templates
* testing/lisp/test-org-capture.el (test-org-capture/fill-template):
Strengthen some expectations, add new tests.
* testing/lisp/test-org-feed.el: New file derived from
testing/lisp/test-org-capture.el.
[-- Attachment #1.2: Type: text/html, Size: 2973 bytes --]
[-- Attachment #2: git.diff --]
[-- Type: text/plain, Size: 6535 bytes --]
diff --git a/testing/lisp/test-org-capture.el b/testing/lisp/test-org-capture.el
index 714309d..e1011d0 100644
--- a/testing/lisp/test-org-capture.el
+++ b/testing/lisp/test-org-capture.el
@@ -26,7 +26,9 @@
(require 'org-capture)
(ert-deftest test-org-capture/fill-template ()
- "Test `org-capture-fill-template' specifications."
+ "Test `org-capture-fill-template' specifications.
+The tests here are very similar to those in
+`test-org-feed/fill-template'."
;; %(sexp) placeholder.
(should
(equal "success!\n"
@@ -44,12 +46,14 @@
(org-capture-fill-template "%T")))
;; %u and %U placeholders.
(should
- (string-match-p
- (format-time-string (substring (car org-time-stamp-formats) 1 -1))
+ (equal
+ (concat "[" (format-time-string
+ (substring (car org-time-stamp-formats) 1 -1)) "]\n")
(org-capture-fill-template "%u")))
(should
- (string-match-p
- (format-time-string (substring (cdr org-time-stamp-formats) 1 -1))
+ (equal
+ (concat "[" (format-time-string
+ (substring (cdr org-time-stamp-formats) 1 -1)) "]\n")
(org-capture-fill-template "%U")))
;; %i placeholder. Make sure sexp placeholders are not expanded
;; when they are inserted through this one.
@@ -57,11 +61,12 @@
(equal "success!\n"
(let ((org-store-link-plist nil))
(org-capture-fill-template "%i" "success!"))))
- (should-not
- (equal "failure!\n"
+ (should
+ (equal "%(concat \"no \" \"evaluation\")\n"
(let ((org-store-link-plist nil))
- (org-capture-fill-template "%i" "%(concat \"failure\" \"!\")"))))
- ;; Test %-escaping with / character.
+ (org-capture-fill-template
+ "%i" "%(concat \"no \" \"evaluation\")"))))
+ ;; Test %-escaping with \ character.
(should
(equal "%i\n"
(let ((org-store-link-plist nil))
@@ -73,7 +78,21 @@
(should
(equal "\\%i\n"
(let ((org-store-link-plist nil))
- (org-capture-fill-template "\\\\\\%i" "success!")))))
+ (org-capture-fill-template "\\\\\\%i" "success!"))))
+ ;; More than one placeholder in the same template.
+ (should
+ (equal "success! success! success! success!\n"
+ (let ((org-store-link-plist nil))
+ (org-capture-fill-template "%i %i %i %i" "success!"))))
+ ;; %(sexp) placeholder with an input containing the traps %, " and )
+ ;; all at once which is complicated to parse.
+ (should
+ (equal
+ "5 % Less (See Item \"3)\" Somewhere)\n"
+ (let ((org-store-link-plist nil))
+ (org-capture-fill-template
+ "%(capitalize \"%i\")"
+ "5 % less (see item \"3)\" somewhere)")))))
diff --git a/testing/lisp/test-org-feed.el b/testing/lisp/test-org-feed.el
index e69de29..6696f95 100644
--- a/testing/lisp/test-org-feed.el
+++ b/testing/lisp/test-org-feed.el
@@ -0,0 +1,110 @@
+;;; test-org-feed.el --- Tests for org-feed.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Michael Brand
+
+;; Author: Michael Brand <michael.ch.brand@gmail.com>
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Unit tests for Org Feed library.
+
+;;; Code:
+
+(require 'org-feed)
+
+(ert-deftest test-org-feed/fill-template ()
+ "Test `org-feed-format-entry' template specifications.
+The tests here are very similar to those in
+`test-org-capture/fill-template'."
+ ;; %(sexp) placeholder.
+ (should
+ (equal "success!"
+ (org-feed-format-entry nil "%(concat \"success\" \"!\")" nil)))
+ ;; %a placeholder.
+ (should
+ (equal "[[http://orgmode.org]]\n"
+ (org-feed-format-entry '(:link "http://orgmode.org") "%a" nil)))
+ ;; %t and %T placeholders.
+ (should
+ (equal (format-time-string (car org-time-stamp-formats))
+ (org-feed-format-entry nil "%t" nil)))
+ (should
+ (equal "<2016-01-02 Sat>"
+ (org-feed-format-entry
+ '(:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") "%t" nil)))
+ (should
+ (equal (format-time-string (cdr org-time-stamp-formats))
+ (org-feed-format-entry nil "%T" nil)))
+ (should
+ (equal "<2016-01-02 Sat 12:00>"
+ (org-feed-format-entry
+ '(:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") "%T" nil)))
+ ;; %u and %U placeholders.
+ (should
+ (equal
+ (concat "[" (format-time-string
+ (substring (car org-time-stamp-formats) 1 -1)) "]")
+ (org-feed-format-entry nil "%u" nil)))
+ (should
+ (equal "[2016-01-02 Sat]"
+ (org-feed-format-entry
+ '(:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") "%u" nil)))
+ (should
+ (equal
+ (concat "[" (format-time-string
+ (substring (cdr org-time-stamp-formats) 1 -1)) "]")
+ (org-feed-format-entry nil "%U" nil)))
+ (should
+ (equal "[2016-01-02 Sat 12:00]"
+ (org-feed-format-entry
+ '(:pubDate "Sat, 02 Jan 2016 12:00:00 +0000") "%U" nil)))
+ ;; %h placeholder. Make sure sexp placeholders are not expanded
+ ;; when they are inserted through this one.
+ (should
+ (equal "success!"
+ (org-feed-format-entry '(:title "success!") "%h" nil)))
+ (should
+ (equal "%(concat \"no \" \"evaluation\")"
+ (org-feed-format-entry
+ '(:title "%(concat \"no \" \"evaluation\")") "%h" nil)))
+ ;; Test %-escaping with \ character.
+ (should
+ (equal "%h"
+ (org-feed-format-entry '(:title "success!") "\\%h" nil)))
+ (should
+ (equal "\\success!"
+ (org-feed-format-entry '(:title "success!") "\\\\%h" nil)))
+ (should
+ (equal "\\%h"
+ (org-feed-format-entry '(:title "success!") "\\\\\\%h" nil)))
+ ;; More than one placeholder in the same template.
+ (should
+ (equal "success! success! success! success!"
+ (org-feed-format-entry '(:title "success!") "%h %h %h %h" nil)))
+ ;; %(sexp) placeholder with an input containing the traps %, ", )
+ ;; and \n all at once which is complicated to parse.
+ (should
+ (equal
+ "5 % Less (See\n Item \"3)\" Somewhere)"
+ (org-feed-format-entry
+ '(:title "5 % less (see\n item \"3)\" somewhere)")
+ "%(capitalize \"%h\")" nil))))
+
+
+
+
+(provide 'test-org-feed)
+;;; test-org-feed.el ends here
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-10 8:08 ` Michael Brand
@ 2016-01-11 23:05 ` Nicolas Goaziou
2016-01-12 7:30 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-11 23:05 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Hello,
Michael Brand <michael.ch.brand@gmail.com> writes:
> I would like to push the attached change to add some ERTs with the
> commit msg below and would like to ask you for a review first.
It looks good. Thank you. Minor suggestions follow.
> (ert-deftest test-org-capture/fill-template ()
> - "Test `org-capture-fill-template' specifications."
> + "Test `org-capture-fill-template' specifications.
> +The tests here are very similar to those in
> +`test-org-feed/fill-template'."
Not sure the last sentence above is really interesting. Ditto for the
other occurrences.
> - (string-match-p
> - (format-time-string (substring (car org-time-stamp-formats) 1 -1))
> + (equal
> + (concat "[" (format-time-string
> + (substring (car org-time-stamp-formats) 1 -1)) "]\n")
> (org-capture-fill-template "%u")))
> (should
> - (string-match-p
> - (format-time-string (substring (cdr org-time-stamp-formats) 1 -1))
> + (equal
> + (concat "[" (format-time-string
> + (substring (cdr org-time-stamp-formats) 1 -1)) "]\n")
I discovered recently (!) `org-time-stamp-formats' which avoids doing
the substring dance. You may want to use it instead. Ditto for the other
occurrences.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-11 23:05 ` Nicolas Goaziou
@ 2016-01-12 7:30 ` Michael Brand
2016-01-12 8:42 ` Nicolas Goaziou
0 siblings, 1 reply; 26+ messages in thread
From: Michael Brand @ 2016-01-12 7:30 UTC (permalink / raw)
To: Org Mode
Hi Nicolas
On Tue, Jan 12, 2016 at 12:05 AM, Nicolas Goaziou
<mail@nicolasgoaziou.fr> wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
>> (ert-deftest test-org-capture/fill-template ()
>> - "Test `org-capture-fill-template' specifications."
>> + "Test `org-capture-fill-template' specifications.
>> +The tests here are very similar to those in
>> +`test-org-feed/fill-template'."
>
> Not sure the last sentence above is really interesting. Ditto for the
> other occurrences.
Maybe this and vice versa is better?:
(ert-deftest test-org-capture/fill-template ()
"Test `org-capture-fill-template' specifications."
;; When working on these tests consider to also change
;; `test-org-feed/fill-template'.
;; %(sexp) placeholder.
(should
[...]
>> - (string-match-p
>> - (format-time-string (substring (car org-time-stamp-formats) 1 -1))
>> + (equal
>> + (concat "[" (format-time-string
>> + (substring (car org-time-stamp-formats) 1 -1)) "]\n")
>> (org-capture-fill-template "%u")))
>> (should
>> - (string-match-p
>> - (format-time-string (substring (cdr org-time-stamp-formats) 1 -1))
>> + (equal
>> + (concat "[" (format-time-string
>> + (substring (cdr org-time-stamp-formats) 1 -1)) "]\n")
>
> I discovered recently (!) `org-time-stamp-formats' which avoids doing
> the substring dance. You may want to use it instead. Ditto for the other
> occurrences.
I don't understand because the org-time-stamp-formats you mention is
already used and does not cover inactive timestamps.
Michael
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-12 7:30 ` Michael Brand
@ 2016-01-12 8:42 ` Nicolas Goaziou
2016-01-13 7:21 ` Michael Brand
0 siblings, 1 reply; 26+ messages in thread
From: Nicolas Goaziou @ 2016-01-12 8:42 UTC (permalink / raw)
To: Michael Brand; +Cc: Org Mode
Hello,
Michael Brand <michael.ch.brand@gmail.com> writes:
> Maybe this and vice versa is better?:
>
> (ert-deftest test-org-capture/fill-template ()
> "Test `org-capture-fill-template' specifications."
>
> ;; When working on these tests consider to also change
> ;; `test-org-feed/fill-template'.
>
> ;; %(sexp) placeholder.
> (should
> [...]
Clearer, IMO.
> I don't understand because the org-time-stamp-formats you mention is
> already used and does not cover inactive timestamps.
I'm talking about the function, not the variable.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Org campture recursively expands %-escapes
2016-01-12 8:42 ` Nicolas Goaziou
@ 2016-01-13 7:21 ` Michael Brand
0 siblings, 0 replies; 26+ messages in thread
From: Michael Brand @ 2016-01-13 7:21 UTC (permalink / raw)
To: Org Mode
Hi Nicolas
On Tue, Jan 12, 2016 at 9:42 AM, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
>
> Michael Brand <michael.ch.brand@gmail.com> writes:
>
> > I don't understand because the org-time-stamp-formats you mention is
> > already used and does not cover inactive timestamps.
>
> I'm talking about the function, not the variable.
Now I found it: The name of the function you mention is not
`org-time-stamp-formats' but
`org-time-stamp-format' without the "s" at the end.
I pushed my change, thank you for your help.
Michael
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2016-01-13 7:21 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-21 22:06 Org campture recursively expands %-escapes Thomas Preindl
2015-11-26 12:54 ` Nicolas Goaziou
2015-11-26 18:52 ` Samuel Wales
2015-11-26 22:02 ` Nicolas Goaziou
2015-11-26 22:10 ` Samuel Wales
2015-11-26 23:02 ` Nicolas Goaziou
2015-11-29 16:00 ` Nicolas Goaziou
2016-01-03 11:44 ` Michael Brand
2016-01-03 19:51 ` Nicolas Goaziou
2016-01-03 20:39 ` Michael Brand
2016-01-03 21:07 ` Nicolas Goaziou
2016-01-04 1:52 ` Michael Brand
2016-01-05 23:39 ` Nicolas Goaziou
2016-01-06 5:45 ` Michael Brand
2016-01-07 16:35 ` Nicolas Goaziou
2016-01-08 20:59 ` Michael Brand
2016-01-08 22:44 ` Nicolas Goaziou
2016-01-09 15:53 ` Michael Brand
2016-01-09 16:05 ` Nicolas Goaziou
2016-01-09 16:31 ` Michael Brand
2016-01-09 17:54 ` Nicolas Goaziou
2016-01-10 8:08 ` Michael Brand
2016-01-11 23:05 ` Nicolas Goaziou
2016-01-12 7:30 ` Michael Brand
2016-01-12 8:42 ` Nicolas Goaziou
2016-01-13 7:21 ` Michael Brand
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).