unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#8935: 24.0.50; `substitute-command-keys' doc
@ 2011-06-25 21:29 Drew Adams
  2011-07-15 14:32 ` Lars Magne Ingebrigtsen
  2011-07-15 15:33 ` Andreas Schwab
  0 siblings, 2 replies; 17+ messages in thread
From: Drew Adams @ 2011-06-25 21:29 UTC (permalink / raw)
  To: 8935

Both the doc string and the doc in the Elisp manual (node `Keys in
Documentation') are unnecessarily confusing wrt `\='.
 
They both correctly say that `\=' "quotes the following character and is
discarded".  However, they then say this to illustrate what is meant:
 
 "thus, `\=\[' puts `\[' into the output, and `\=\=' puts
  `\=' into the output."
 
This is uncessarily complex and misleading.  All the `\=' does is
quote/escape the (single) next character, whatever it is.  Nothing
more.
 
It has no special effect on special character combinations such as `\['
and `\='.  If you really want to say something about escaping `\' as
the next character then I suppose you could: "In particular, `\=\'
produces `\' in the output.  The character following the escaped
character does not enter into (i.e., affect) the behavior at all.
 

In GNU Emacs 24.0.50.1 (i386-mingw-nt5.1.2600)
 of 2011-06-20 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (4.5) --no-opt --cflags
-Ic:/build/include'
 






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-06-25 21:29 bug#8935: 24.0.50; `substitute-command-keys' doc Drew Adams
@ 2011-07-15 14:32 ` Lars Magne Ingebrigtsen
  2011-07-15 15:33 ` Andreas Schwab
  1 sibling, 0 replies; 17+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-07-15 14:32 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8935

"Drew Adams" <drew.adams@oracle.com> writes:

> It has no special effect on special character combinations such as `\['
> and `\='.  If you really want to say something about escaping `\' as
> the next character then I suppose you could: "In particular, `\=\'
> produces `\' in the output.  The character following the escaped
> character does not enter into (i.e., affect) the behavior at all.

I've now done this.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-06-25 21:29 bug#8935: 24.0.50; `substitute-command-keys' doc Drew Adams
  2011-07-15 14:32 ` Lars Magne Ingebrigtsen
@ 2011-07-15 15:33 ` Andreas Schwab
  2011-07-15 16:00   ` Drew Adams
                     ` (3 more replies)
  1 sibling, 4 replies; 17+ messages in thread
From: Andreas Schwab @ 2011-07-15 15:33 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8935

"Drew Adams" <drew.adams@oracle.com> writes:

> It has no special effect on special character combinations such as `\['
> and `\='.  If you really want to say something about escaping `\' as
> the next character then I suppose you could: "In particular, `\=\'
> produces `\' in the output.

This is wrong, because \ by itself has no special meaning, so you don't
need to precede it by \=.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 15:33 ` Andreas Schwab
@ 2011-07-15 16:00   ` Drew Adams
  2011-07-15 16:35   ` Lars Magne Ingebrigtsen
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 17+ messages in thread
From: Drew Adams @ 2011-07-15 16:00 UTC (permalink / raw)
  To: 'Andreas Schwab'; +Cc: 8935

> > It has no special effect on special character combinations 
> > such as `\[' and `\='.  If you really want to say something
> > about escaping `\' as the next character then I suppose you
> > could: "In particular, `\=\' produces `\' in the output.
> 
> This is wrong, because \ by itself has no special meaning, so 
> you don't need to precede it by \=.

It's not wrong.  \ by itself has no special meaning, so it need not be escaped
when by itself - agreed.

But \ followed by these particular chars (e.g. `[') does have special meaning
for `substitute-command-keys', so when followed by such a char it does need to
be escaped, if you want `\' in the output.

It is nevertheless the \ and only the \ that is escaped.  The escaping code
takes no look past the \ to see what follows it.  It is you, the programmer, who
decides whether a particular \ needs escaping, and yes, you do that by looking
at the following char (e.g. `[').

But _you_ do that - that is not part of what `substitute-command-keys' does or
`\=' does.






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 15:33 ` Andreas Schwab
  2011-07-15 16:00   ` Drew Adams
@ 2011-07-15 16:35   ` Lars Magne Ingebrigtsen
  2011-07-15 16:35   ` Lars Magne Ingebrigtsen
  2011-07-18 13:55   ` Stefan Monnier
  3 siblings, 0 replies; 17+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-07-15 16:35 UTC (permalink / raw)
  To: 8935

Andreas Schwab <schwab@linux-m68k.org> writes:

> "Drew Adams" <drew.adams@oracle.com> writes:
>
>> It has no special effect on special character combinations such as `\['
>> and `\='.  If you really want to say something about escaping `\' as
>> the next character then I suppose you could: "In particular, `\=\'
>> produces `\' in the output.
>
> This is wrong, because \ by itself has no special meaning, so you don't
> need to precede it by \=.

I see.  I thought it worked the normal way, in that "\e" would be "e".
Thanks for correcting this.  Did you do the manual, too?  If not I can
take care of that.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 15:33 ` Andreas Schwab
  2011-07-15 16:00   ` Drew Adams
  2011-07-15 16:35   ` Lars Magne Ingebrigtsen
@ 2011-07-15 16:35   ` Lars Magne Ingebrigtsen
  2011-07-15 17:23     ` Drew Adams
  2011-07-18 13:55   ` Stefan Monnier
  3 siblings, 1 reply; 17+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-07-15 16:35 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 8935

Andreas Schwab <schwab@linux-m68k.org> writes:

> "Drew Adams" <drew.adams@oracle.com> writes:
>
>> It has no special effect on special character combinations such as `\['
>> and `\='.  If you really want to say something about escaping `\' as
>> the next character then I suppose you could: "In particular, `\=\'
>> produces `\' in the output.
>
> This is wrong, because \ by itself has no special meaning, so you don't
> need to precede it by \=.

I see.  I thought it worked the normal way, in that "\e" would be "e".
Thanks for correcting this.  Did you do the manual, too?  If not I can
take care of that.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 16:35   ` Lars Magne Ingebrigtsen
@ 2011-07-15 17:23     ` Drew Adams
  2011-07-15 17:28       ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 17+ messages in thread
From: Drew Adams @ 2011-07-15 17:23 UTC (permalink / raw)
  To: 'Lars Magne Ingebrigtsen', 'Andreas Schwab'; +Cc: 8935

> > This is wrong, because \ by itself has no special meaning, 
> > so you don't need to precede it by \=.
> 
> I see.  I thought it worked the normal way, in that "\e" would be "e".

It does.  That is correct.

Andreas was wrong in saying it is wrong.

What is true is that \ by itself (not followed by [, =, etc.) does not _NEED_ to
be escaped.  But it is certainly true that \= escapes \, whether it needs to in
any given context (e.g. \[) or not (e.g. \ abc).  If it escapes a \ that does
not need escaping, the effect is a no-op.






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 17:23     ` Drew Adams
@ 2011-07-15 17:28       ` Lars Magne Ingebrigtsen
  2011-07-15 18:38         ` Andreas Schwab
  2011-07-15 19:18         ` Drew Adams
  0 siblings, 2 replies; 17+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-07-15 17:28 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8935, 'Andreas Schwab'

"Drew Adams" <drew.adams@oracle.com> writes:

> What is true is that \ by itself (not followed by [, =, etc.) does not
> _NEED_ to be escaped.  But it is certainly true that \= escapes \,
> whether it needs to in any given context (e.g. \[) or not (e.g. \
> abc).  If it escapes a \ that does not need escaping, the effect is a
> no-op.

Uhm.  Now I'm even more confused.

"\=\e" will print as "\e"?  Right?  So it's not a noop, and the fix I
applied was correct.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 17:28       ` Lars Magne Ingebrigtsen
@ 2011-07-15 18:38         ` Andreas Schwab
  2011-07-15 19:17           ` Drew Adams
  2011-07-15 19:18         ` Drew Adams
  1 sibling, 1 reply; 17+ messages in thread
From: Andreas Schwab @ 2011-07-15 18:38 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: 8935

Lars Magne Ingebrigtsen <larsi@gnus.org> writes:

> "\=\e" will print as "\e"? Right?  So it's not a noop, and the fix I
> applied was correct.

No.  The *only* special sequences processed by substitute-command-keys'
are '\=', '\[', '\<' and '\{'.  Nothing else.  The sentence is about how
to write these special sequences in the doc string so that they are not
treated specially, so the examples should talk about '\=' and '\[', not
about '\'.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 18:38         ` Andreas Schwab
@ 2011-07-15 19:17           ` Drew Adams
  2011-07-15 20:09             ` Andreas Schwab
  0 siblings, 1 reply; 17+ messages in thread
From: Drew Adams @ 2011-07-15 19:17 UTC (permalink / raw)
  To: 'Andreas Schwab', 'Lars Magne Ingebrigtsen'; +Cc: 8935

> > "\=\e" will print as "\e"? Right?  So it's not a noop, and the fix I
> > applied was correct.
> 
> No.  The *only* special sequences processed by 
> substitute-command-keys' are '\=', '\[', '\<' and '\{'.
> Nothing else.

Correct.

> The sentence is about how to write these special sequences in
> the doc string so that they are not treated specially,

Correct.

> so the examples should talk about '\=' and '\[', not about '\'.

It's OK to mention that in "\=\[" the \= escapes the \ so that \[ appears in the
output.  But it is only the \ that is being escaped here.

Escaping a character means making it act normally, not specially.  Only the \
acts specially, and it does so only when it precedes [, {, etc.

So yes, this escaping of \ only has an effect when the \ precedes [, {, etc.

But strictly speaking it is only the \ that gets escaped in these contexts.  The
=, [, etc. does not need to be escaped because those are not treated specially
unless preceded by an unescaped \.  So only one character needs to be escaped:
the \.

Anyway, it's a minor point (bug).  I really don't care what you do with it.

When I read the doc string, I found it confusing.  I looked at the code and
understood.  It is _enough_ to say that \= escapes a \, preventing it from
introducing a substitution when followed by =, [, etc.

Or as I said in the beginning:

> This is uncessarily complex and misleading.  All the `\=' does is
> quote/escape the (single) next character, whatever it is.  Nothing
> more.






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 17:28       ` Lars Magne Ingebrigtsen
  2011-07-15 18:38         ` Andreas Schwab
@ 2011-07-15 19:18         ` Drew Adams
  2011-07-15 19:22           ` Lars Magne Ingebrigtsen
  1 sibling, 1 reply; 17+ messages in thread
From: Drew Adams @ 2011-07-15 19:18 UTC (permalink / raw)
  To: 'Lars Magne Ingebrigtsen'; +Cc: 8935, 'Andreas Schwab'

> > What is true is that \ by itself (not followed by [, =, 
> > etc.) does not _NEED_ to be escaped.  But it is certainly true
> > that \= escapes \, whether it needs to in any given context
> > (e.g. \[) or not (e.g. \abc).  If it escapes a \ that does not
> > need escaping, the effect is a no-op.
> 
> Uhm.  Now I'm even more confused.
> 
> "\=\e" will print as "\e"?  Right?

Right.

> So it's not a noop,

It's a no-op in the sense that it does nothing.  Of course, it is still the case
that, as the doc string says, the \= itself "is discarded".  What remains is the
\ that was escaped.

Not sure what your confusion is.  \= escapes the char that follows it.  What
does escaping mean in this context?  Preventing \ from having any special
behavior when it precedes =, [, etc.

The point is that it is not the pair of characters \=, \[, etc. that is escaped.
\ is the only char escaped: it is prevented from doing anything special; it just
appears in the output as is.  Because \ gets escaped, it has no special
`substitute-command-keys' effect on what follows it, whatever that might be.

> and the fix I applied was correct.

Dunno what it was.

What I described is a proper fix, IMO.






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 19:18         ` Drew Adams
@ 2011-07-15 19:22           ` Lars Magne Ingebrigtsen
  2011-07-15 19:25             ` Drew Adams
  0 siblings, 1 reply; 17+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-07-15 19:22 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8935, 'Andreas Schwab'

"Drew Adams" <drew.adams@oracle.com> writes:

>> and the fix I applied was correct.
>
> Dunno what it was.
>
> What I described is a proper fix, IMO.

You don't read the emacs-diffs mailing list?  :-)

I implemented what you described.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 19:22           ` Lars Magne Ingebrigtsen
@ 2011-07-15 19:25             ` Drew Adams
  0 siblings, 0 replies; 17+ messages in thread
From: Drew Adams @ 2011-07-15 19:25 UTC (permalink / raw)
  To: 'Lars Magne Ingebrigtsen'; +Cc: 8935, 'Andreas Schwab'

> > Dunno what it was.
> 
> You don't read the emacs-diffs mailing list?  :-)

Nope.  Sorry.

> I implemented what you described.

Thank you.






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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 19:17           ` Drew Adams
@ 2011-07-15 20:09             ` Andreas Schwab
  0 siblings, 0 replies; 17+ messages in thread
From: Andreas Schwab @ 2011-07-15 20:09 UTC (permalink / raw)
  To: Drew Adams; +Cc: 'Lars Magne Ingebrigtsen', 8935

"Drew Adams" <drew.adams@oracle.com> writes:

> Escaping a character means making it act normally, not specially.  Only the \
> acts specially,

Wrong.

> and it does so only when it precedes [, {, etc.

Right.  And only this is of interest.

> It is _enough_ to say that \= escapes a \, preventing it from
> introducing a substitution when followed by =, [, etc.

No, this is the wrong thing to do.  The doc string should say how to
produce a value that contains the two character sequences '\=' or '\['.
That's the *whole* point of the examples (and these are *examples*, not
specification).

You don't need '\=' to produce a backslash in the value.  So that is
useless to say so.

A doc string needs to get to the point, not be technically correct.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-15 15:33 ` Andreas Schwab
                     ` (2 preceding siblings ...)
  2011-07-15 16:35   ` Lars Magne Ingebrigtsen
@ 2011-07-18 13:55   ` Stefan Monnier
  2011-07-18 14:27     ` Andreas Schwab
  3 siblings, 1 reply; 17+ messages in thread
From: Stefan Monnier @ 2011-07-18 13:55 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 8935

>> It has no special effect on special character combinations such as `\['
>> and `\='.  If you really want to say something about escaping `\' as
>> the next character then I suppose you could: "In particular, `\=\'
>> produces `\' in the output.
> This is wrong, because \ by itself has no special meaning, so you don't
> need to precede it by \=.

Actually \ does have a special meaning, which depends on the following
char (just like \ in regexps).  The difference between that and regexps
is that in regexp \<char> turns into just <char> when \<char> has no
special meaning, where it turns into \<char> here.


        Stefan





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-18 13:55   ` Stefan Monnier
@ 2011-07-18 14:27     ` Andreas Schwab
  2011-07-18 16:20       ` Stefan Monnier
  0 siblings, 1 reply; 17+ messages in thread
From: Andreas Schwab @ 2011-07-18 14:27 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 8935

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Actually \ does have a special meaning, which depends on the following
> char (just like \ in regexps).  The difference between that and regexps
> is that in regexp \<char> turns into just <char> when \<char> has no
> special meaning, where it turns into \<char> here.

If you want a \ in a regexp you must write \\, always.  But if you want
to have a \ from substitute-command-keys you just write \, and if you
want \\= you must write \\=\=.  Thus \ by itself is not special here.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





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

* bug#8935: 24.0.50; `substitute-command-keys' doc
  2011-07-18 14:27     ` Andreas Schwab
@ 2011-07-18 16:20       ` Stefan Monnier
  0 siblings, 0 replies; 17+ messages in thread
From: Stefan Monnier @ 2011-07-18 16:20 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 8935

>> Actually \ does have a special meaning, which depends on the following
>> char (just like \ in regexps).  The difference between that and regexps
>> is that in regexp \<char> turns into just <char> when \<char> has no
>> special meaning, where it turns into \<char> here.

> If you want a \ in a regexp you must write \\, always.  But if you want
> to have a \ from substitute-command-keys you just write \, and if you
> want \\= you must write \\=\=.  Thus \ by itself is not special here.

The "by itself" doesn't mean much, and \ is special because it changes
the meaning of the subsequent character.  I agree it's not special in
the same way as it is in regexps, but it is still special.


        Stefan





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

end of thread, other threads:[~2011-07-18 16:20 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-25 21:29 bug#8935: 24.0.50; `substitute-command-keys' doc Drew Adams
2011-07-15 14:32 ` Lars Magne Ingebrigtsen
2011-07-15 15:33 ` Andreas Schwab
2011-07-15 16:00   ` Drew Adams
2011-07-15 16:35   ` Lars Magne Ingebrigtsen
2011-07-15 16:35   ` Lars Magne Ingebrigtsen
2011-07-15 17:23     ` Drew Adams
2011-07-15 17:28       ` Lars Magne Ingebrigtsen
2011-07-15 18:38         ` Andreas Schwab
2011-07-15 19:17           ` Drew Adams
2011-07-15 20:09             ` Andreas Schwab
2011-07-15 19:18         ` Drew Adams
2011-07-15 19:22           ` Lars Magne Ingebrigtsen
2011-07-15 19:25             ` Drew Adams
2011-07-18 13:55   ` Stefan Monnier
2011-07-18 14:27     ` Andreas Schwab
2011-07-18 16:20       ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).