From: Joost Kremers <joostkremers@fastmail.fm>
To: "Clément Pit--Claudel" <clement.pit@gmail.com>
Cc: Emacs developers <emacs-devel@gnu.org>
Subject: Re: RFC: String interpolation
Date: Fri, 09 Dec 2016 09:57:14 +0100 [thread overview]
Message-ID: <87oa0lwkd1.fsf@fastmail.fm> (raw)
In-Reply-To: <0e6143f6-456b-5086-db27-439df4a5be27@gmail.com>
On Thu, Dec 08 2016, Clément Pit--Claudel wrote:
> On 2016-12-08 09:43, Joost Kremers wrote:
>>> (let ((password "letmein")) (fmt "The password is
>>> ${password}")) ⇒
>>> "The password is letmein"
>>
>> Why the {}? Is there any context in which $<expr> is ambiguous
>> such
>> that ${<expr>} is needed to resolve it? Other than vectors, I
>> mean
>
> Yes, unfortunately: you can include virtually anything in a Lisp
> variable name.
>
> (let* ((a 1)
> (b 2.0)
> (a/b (/ a b)))
> (fmt "$a/$b = ${a/b}"))
My initial thinking was that you could simply take everything up
to the next whitespace character to be part of the symbol, but
obviously I didn't realise that it should be possible *not* to
have whitespace immediately after the value of a symbol. But I see
your point now.
>> I honestly must say I find these last two very confusing. I
>> would
>> simply write:
>>
>> (fmt "Today is $(format-time-string \"%Y-%m-%d\"
>> current-time)).")
>>
>> The escaped double quotes are not perfect, but I find this much
>> more
>> readable and more pleasant to look at.
>
> I really dislike the escaped quotes, but it might just be me :)
Oh, I'm sure you're not the only one. :-) I'm not a big fan,
either, but I can live with them. It'd be nice to have two
different string delimiters, as in Python (actually, Python has
three...) but that's not something a package can fix.
Anyway, your current implementation handles
"$[date|%Y-%m-%d](current-time)" as well as the format that I
prefer, so no-one loses out.
> This was inspired from Python's per-type format string, but I'm
> open to better syntax suggestions :)
I was hoping to provide some, but looking at it now, I doubt I
was... :-)
>> Perhaps you should also look at abo-abo's hydra package, since
>> he
>> does basically the same thing in his hydra doc strings. AFAICT,
>> it
>> works this way: % starts a placeholder, ` marks the start of
>> the
>> expression. If the expression is an s-expr, you can leave out
>> the `.
>
> Thanks for the reference! Do you know how it knows where to
> stop after a backtick?
From a quick look at the code, I believe the assumption is that
symbols only contain lower and uppercase letters, digits and the
characters - and / . So that won't work. The relevant code seems
to be here:
https://github.com/abo-abo/hydra/blob/master/hydra.el#L636
> I'm a bit worried about the lack of delimiter after `, though;
maybe it would help to see what the example above (with $a/$b and
$a/b) would look like in that syntax.
AFAICT it won't work. "%`a/b" would refer to the symbol `a/b',
which is fine, but "%`a/%`b" would refer to a symbol `a/' and a
symbol `b', but the former doesn't exist. And `a/b' only happens
to work because / is included in the regexp used to parse hydra
doc strings. Other characters won't work at all.
>>> fmt expands the strings at compile time (so they must be
>>> constant
>>> strings).
>>
>> I've occasionally appreciated the fact that I can pass a
>> dynamically
>> created format string to `format'... ;-) Ok, I could always use
>> `format' in such cases.
>
> Yes; otherwise, fmt becomes a thinly veiled eval, and that isn't
> great.
True.
--
Joost Kremers
Life has its moments
next prev parent reply other threads:[~2016-12-09 8:57 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-08 1:13 RFC: String interpolation Clément Pit--Claudel
2016-12-08 8:27 ` Andreas Schwab
2016-12-08 8:38 ` Joost Kremers
2016-12-08 9:05 ` Philippe Vaucher
2016-12-08 18:25 ` Clément Pit--Claudel
2016-12-08 9:02 ` Philippe Vaucher
2016-12-08 18:22 ` Clément Pit--Claudel
2016-12-08 14:43 ` Joost Kremers
2016-12-08 18:37 ` Clément Pit--Claudel
2016-12-08 20:04 ` Stefan Monnier
2016-12-09 8:57 ` Joost Kremers [this message]
2016-12-08 15:51 ` Drew Adams
2016-12-08 18:21 ` Clément Pit--Claudel
2016-12-08 20:38 ` Richard Stallman
[not found] ` <<E1cF5SK-0000HO-EL@fencepost.gnu.org>
2016-12-08 22:04 ` Drew Adams
2016-12-08 19:05 ` Stefan Monnier
2016-12-08 19:31 ` Clément Pit--Claudel
2016-12-08 21:31 ` Stefan Monnier
2016-12-10 16:01 ` Clément Pit--Claudel
2016-12-09 19:19 ` Ted Zlatanov
2016-12-09 22:45 ` Clément Pit--Claudel
2016-12-11 2:53 ` Ted Zlatanov
2016-12-11 18:46 ` Lars Ingebrigtsen
2016-12-11 18:56 ` Clément Pit--Claudel
2016-12-11 19:34 ` Lars Ingebrigtsen
2016-12-11 17:38 ` Stefan Monnier
2016-12-11 17:53 ` Clément Pit--Claudel
2016-12-10 14:11 ` Lars Ingebrigtsen
2016-12-10 14:25 ` Clément Pit--Claudel
2016-12-10 15:39 ` Lars Ingebrigtsen
2016-12-10 15:49 ` Clément Pit--Claudel
2016-12-10 16:01 ` Yuri Khan
2016-12-10 17:58 ` Clément Pit--Claudel
2016-12-11 17:47 ` Stefan Monnier
2016-12-11 19:31 ` Yuri Khan
2016-12-11 20:12 ` Stefan Monnier
2016-12-11 9:35 ` Richard Stallman
2016-12-11 16:29 ` Clément Pit--Claudel
2016-12-11 18:42 ` Lars Ingebrigtsen
2016-12-12 19:41 ` Richard Stallman
2016-12-11 18:41 ` Lars Ingebrigtsen
2016-12-11 21:05 ` Helmut Eller
2016-12-11 21:26 ` Lars Ingebrigtsen
2016-12-12 2:39 ` Stefan Monnier
2016-12-12 9:44 ` Lars Ingebrigtsen
2016-12-12 13:03 ` Stefan Monnier
2016-12-12 14:47 ` Lars Ingebrigtsen
2016-12-12 15:04 ` Stefan Monnier
2016-12-12 15:26 ` Lars Ingebrigtsen
2016-12-12 17:05 ` Stefan Monnier
2016-12-12 17:12 ` Lars Ingebrigtsen
2016-12-12 17:23 ` Stefan Monnier
2016-12-12 13:40 ` Clément Pit--Claudel
2016-12-12 14:43 ` Lars Ingebrigtsen
2016-12-12 14:54 ` Clément Pit--Claudel
2016-12-12 17:14 ` Stefan Monnier
2016-12-12 17:46 ` Paul Eggert
2016-12-12 18:33 ` Lars Ingebrigtsen
2016-12-12 19:51 ` Ted Zlatanov
2016-12-12 20:41 ` Paul Eggert
2016-12-12 23:40 ` Paul Eggert
2016-12-13 17:42 ` Richard Stallman
2016-12-13 18:05 ` Paul Eggert
2016-12-13 23:55 ` Lars Ingebrigtsen
2016-12-14 0:07 ` Paul Eggert
2016-12-14 0:10 ` John Wiegley
2016-12-14 0:14 ` Lars Ingebrigtsen
2016-12-14 0:17 ` Paul Eggert
2016-12-14 0:26 ` John Wiegley
2016-12-14 1:48 ` Drew Adams
2016-12-14 2:48 ` Elias Mårtenson
2016-12-14 3:33 ` Drew Adams
2016-12-14 3:52 ` Elias Mårtenson
2016-12-14 13:52 ` Lars Brinkhoff
2016-12-14 13:57 ` Lars Brinkhoff
2016-12-14 0:24 ` Drew Adams
2016-12-14 0:21 ` Clément Pit--Claudel
2016-12-14 14:10 ` Lars Ingebrigtsen
2016-12-14 17:00 ` Richard Stallman
2016-12-12 19:43 ` Richard Stallman
2016-12-12 21:11 ` Lars Ingebrigtsen
2016-12-13 17:41 ` Richard Stallman
2016-12-13 17:43 ` Lars Ingebrigtsen
2016-12-14 17:01 ` Richard Stallman
2016-12-13 1:04 ` Ted Zlatanov
2016-12-12 16:39 ` Helmut Eller
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87oa0lwkd1.fsf@fastmail.fm \
--to=joostkremers@fastmail.fm \
--cc=clement.pit@gmail.com \
--cc=emacs-devel@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.