unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: emacs: are multi-char parentheses possible?
       [not found] <m3ppiilhna.fsf@gmail.com>
@ 2014-06-09 15:38 ` Stefan Monnier
  2014-06-10  0:14   ` Leo Liu
  2014-06-10  5:13   ` Andreas Röhler
  0 siblings, 2 replies; 7+ messages in thread
From: Stefan Monnier @ 2014-06-09 15:38 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> Do you know if it is possible for Emacs to handle a pair of multi-char
> parentheses?

Yes, I do.  I also know the answer is not just a plain boolean.

> Take << and >> for example,
>
> (setq-local syntax-propertize-function (syntax-propertize-rules
>                                           ("\\(<\\)<" (1 "(>"))
>                                           (">\\(>\\)" (1 ")<"))))
>
> show-paren-mode can highlight "<<" and ">>" but up-list aren't aware of
> them.

up-list should handle this just as well as show-paren and
for/backward-sexp (and does, in my tests).

Maybe you tried a "forward up-list" where the closing ">>" hadn't yet been
syntax-propertized?

This technique has some downsides, but in the case of << ... >> it might
work well enough.

For things like "begin...end" it's more annoying (e.g. backward word
will stop right between the "b" and the "egin" and forward-word will
stop right between "en" and "d").  For those, SMIE might be a better
option (which uses hooks in show-paren and forward-sexp to try and make
them do The Right Thing, tho the up-list case is only 90% working).


        Stefan



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

* Re: emacs: are multi-char parentheses possible?
  2014-06-09 15:38 ` emacs: are multi-char parentheses possible? Stefan Monnier
@ 2014-06-10  0:14   ` Leo Liu
  2014-06-10  2:21     ` Stefan Monnier
  2014-06-10  5:13   ` Andreas Röhler
  1 sibling, 1 reply; 7+ messages in thread
From: Leo Liu @ 2014-06-10  0:14 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On 2014-06-09 11:38 -0400, Stefan Monnier wrote:
> Maybe you tried a "forward up-list" where the closing ">>" hadn't yet been
> syntax-propertized?
>
> This technique has some downsides, but in the case of << ... >> it might
> work well enough.

Thanks for the confirmation. With the syntax-table property the normal
sexp motion commands actually work. But I was in a smie mode which
redefines forward-sexp and the lexer and grammar aren't setup to handle
<< and >> so it appeared forward-sexp failed. I was looking in the wrong
direction for fix.

> For things like "begin...end" it's more annoying (e.g. backward word
> will stop right between the "b" and the "egin" and forward-word will
> stop right between "en" and "d").  For those, SMIE might be a better
> option (which uses hooks in show-paren and forward-sexp to try and make
> them do The Right Thing, tho the up-list case is only 90% working).

I like this feature ;)

Leo



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

* Re: emacs: are multi-char parentheses possible?
  2014-06-10  0:14   ` Leo Liu
@ 2014-06-10  2:21     ` Stefan Monnier
  2014-06-10  9:22       ` Leo Liu
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Monnier @ 2014-06-10  2:21 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> Thanks for the confirmation.  With the syntax-table property the normal
> sexp motion commands actually work.  But I was in a smie mode which
> redefines forward-sexp and the lexer and grammar aren't setup to handle
> << and >> so it appeared forward-sexp failed.

Maybe you "did something wrong" there, but SMIE normally tries to obey
the existing syntax tables (and syntax-table properties), so maybe you
saw a bug in SMIE.


        Stefan



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

* Re: emacs: are multi-char parentheses possible?
  2014-06-09 15:38 ` emacs: are multi-char parentheses possible? Stefan Monnier
  2014-06-10  0:14   ` Leo Liu
@ 2014-06-10  5:13   ` Andreas Röhler
  1 sibling, 0 replies; 7+ messages in thread
From: Andreas Röhler @ 2014-06-10  5:13 UTC (permalink / raw)
  To: emacs-devel

On 09.06.2014 17:38, Stefan Monnier wrote:
>> Do you know if it is possible for Emacs to handle a pair of multi-char
>> parentheses?
>
> Yes, I do.  I also know the answer is not just a plain boolean.
>
>> Take << and >> for example,
>>
>> (setq-local syntax-propertize-function (syntax-propertize-rules
>>                                            ("\\(<\\)<" (1 "(>"))
>>                                            (">\\(>\\)" (1 ")<"))))
>>
>> show-paren-mode can highlight "<<" and ">>" but up-list aren't aware of
>> them.
>
> up-list should handle this just as well as show-paren and
> for/backward-sexp (and does, in my tests).
>
> Maybe you tried a "forward up-list" where the closing ">>" hadn't yet been
> syntax-propertized?
>
> This technique has some downsides, but in the case of << ... >> it might
> work well enough.
>
> For things like "begin...end" it's more annoying (e.g. backward word
> will stop right between the "b" and the "egin" and forward-word will
> stop right between "en" and "d").  For those, SMIE might be a better
> option (which uses hooks in show-paren and forward-sexp to try and make
> them do The Right Thing, tho the up-list case is only 90% working).
>
>
>          Stefan
>
>

With thingatpt you may specify arbitrary strings as delimiters.
Maybe that's an option in context also.

Andreas




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

* Re: emacs: are multi-char parentheses possible?
  2014-06-10  2:21     ` Stefan Monnier
@ 2014-06-10  9:22       ` Leo Liu
  2014-06-10 20:20         ` Stefan Monnier
  2014-06-11  7:40         ` Andreas Röhler
  0 siblings, 2 replies; 7+ messages in thread
From: Leo Liu @ 2014-06-10  9:22 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On 2014-06-09 22:21 -0400, Stefan Monnier wrote:
> Maybe you "did something wrong" there, but SMIE normally tries to obey
> the existing syntax tables (and syntax-table properties), so maybe you
> saw a bug in SMIE.

hmm, I can no longer find a recipe to reproduce the problem I was seeing
where forward-sexp before << moved forward just one char.

BTW, some languages have structured documentation embedded in comments,
for example, texinfo used by octave, or xml-like by misc other
languages. What is the best way to provide in-comment indentation for
them? Is this something SMIE might support in future?

Thanks,
Leo



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

* Re: emacs: are multi-char parentheses possible?
  2014-06-10  9:22       ` Leo Liu
@ 2014-06-10 20:20         ` Stefan Monnier
  2014-06-11  7:40         ` Andreas Röhler
  1 sibling, 0 replies; 7+ messages in thread
From: Stefan Monnier @ 2014-06-10 20:20 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> BTW, some languages have structured documentation embedded in comments,
> for example, texinfo used by octave, or xml-like by misc other
> languages.  What is the best way to provide in-comment indentation for
> them?  Is this something SMIE might support in future?

This is currently largely "unchartered territory".  I don't think SMIE
would be incompatible with it, but it would need some new
smie-indent-foo function in smie-indent-functions for that.


        Stefan



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

* Re: emacs: are multi-char parentheses possible?
  2014-06-10  9:22       ` Leo Liu
  2014-06-10 20:20         ` Stefan Monnier
@ 2014-06-11  7:40         ` Andreas Röhler
  1 sibling, 0 replies; 7+ messages in thread
From: Andreas Röhler @ 2014-06-11  7:40 UTC (permalink / raw)
  To: emacs-devel

On 10.06.2014 11:22, Leo Liu wrote:
> On 2014-06-09 22:21 -0400, Stefan Monnier wrote:
>> Maybe you "did something wrong" there, but SMIE normally tries to obey
>> the existing syntax tables (and syntax-table properties), so maybe you
>> saw a bug in SMIE.
>
> hmm, I can no longer find a recipe to reproduce the problem I was seeing
> where forward-sexp before << moved forward just one char.
>
> BTW, some languages have structured documentation embedded in comments,
> for example, texinfo used by octave, or xml-like by misc other
> languages. What is the best way to provide in-comment indentation for
> them? Is this something SMIE might support in future?
>
> Thanks,
> Leo
>
>

https://launchpad.net/s-x-emacs-werkstatt/+download

comes with a parser --in beg-end.el--, where in-comment detection of thing-at-point forms might be switched on.
 From there it should be possible to calculate indentation.

HTH,

Andreas




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

end of thread, other threads:[~2014-06-11  7:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <m3ppiilhna.fsf@gmail.com>
2014-06-09 15:38 ` emacs: are multi-char parentheses possible? Stefan Monnier
2014-06-10  0:14   ` Leo Liu
2014-06-10  2:21     ` Stefan Monnier
2014-06-10  9:22       ` Leo Liu
2014-06-10 20:20         ` Stefan Monnier
2014-06-11  7:40         ` Andreas Röhler
2014-06-10  5:13   ` Andreas Röhler

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