* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
@ 2014-11-17 11:34 Josh Berdine
2022-05-12 1:44 ` Lars Ingebrigtsen
0 siblings, 1 reply; 8+ messages in thread
From: Josh Berdine @ 2014-11-17 11:34 UTC (permalink / raw)
To: 19080
emacs -Q
M-x load-file
~/.opam/4.02.1/share/tuareg/tuareg.el
M-x tuareg-mode
M-x show-paren-mode
let f () =
let x = 0 in
()
C-u 17 C-b
This starts a fresh emacs, loads the tuareg mode, enables
show-paren-mode, enters some ocaml code, and puts the point on a 'let'
keyword.
In this situation, it would be helpful if the 'let' and corresponding
'in' were highlighted in 'show-paren-match-face'. And similarly for
"fun", "if", "match", and "try".
See related discussion at
<https://github.com/ocaml/tuareg/issues/26#issuecomment-63101028>.
In GNU Emacs 24.4.1 (x86_64-pc-linux-gnu, GTK+ Version 3.10.8)
of 2014-11-11 on juniper, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.11501000
System Description: Ubuntu 14.04.1 LTS
Configured using:
`configure --build x86_64-linux-gnu --prefix=/usr
--sharedstatedir=/var/lib --libexecdir=/usr/lib
--localstatedir=/var/lib --infodir=/usr/share/info
--mandir=/usr/share/man --with-pop=yes
--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.4/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.4/site-lisp:/usr/share/emacs/site-lisp
--build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
--libexecdir=/usr/lib --localstatedir=/var/lib
--infodir=/usr/share/info --mandir=/usr/share/man --with-pop=yes
--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.4/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.4/site-lisp:/usr/share/emacs/site-lisp
--with-x=yes --with-x-toolkit=gtk3 --with-toolkit-scroll-bars
'CFLAGS=-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -Wall' CPPFLAGS=-D_FORTIFY_SOURCE=2
'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro''
Important settings:
value of $LC_COLLATE: C
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Tuareg
Minor modes in effect:
show-paren-mode: t
tooltip-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
M-x l o a d - f i l e <return> C-y <return> M-x t u
a r e g - m o d e <return> M-x s h o w - p a r e n
- m o d e <return> <help-echo> <help-echo> C-y C-u
1 7 C-b M-x r e p o r t - e m <tab> <return>
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Loading /home/jjb/.opam/4.02.1/share/tuareg/tuareg.el (source)...done
Show-Paren mode enabled
Load-path shadows:
None found.
Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
help-fns mail-prsvr mail-utils cus-start cus-load paren caml tuareg
speedbar sb-image ezimage dframe skeleton compile comint ansi-color ring
derived smie cl-macs easymenu cl gv cl-loaddefs cl-lib time-date tooltip
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
lisp-mode prog-mode register page menu-bar rfn-eshadow timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham
georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese hebrew greek romanian slovak czech european ethiopic
indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple
abbrev minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
dbusbind gfilenotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)
Memory information:
((conses 16 109132 5468)
(symbols 48 20890 0)
(miscs 40 45 136)
(strings 32 17549 4306)
(string-bytes 1 487656)
(vectors 16 11154)
(vector-slots 8 402826 5044)
(floats 8 65 238)
(intervals 56 286 0)
(buffers 960 12)
(heap 1024 17476 1105))
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2014-11-17 11:34 bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords Josh Berdine
@ 2022-05-12 1:44 ` Lars Ingebrigtsen
2022-05-12 5:36 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Lars Ingebrigtsen @ 2022-05-12 1:44 UTC (permalink / raw)
To: Josh Berdine; +Cc: 19080
Josh Berdine <josh@berdine.net> writes:
> emacs -Q
> M-x load-file
> ~/.opam/4.02.1/share/tuareg/tuareg.el
> M-x tuareg-mode
> M-x show-paren-mode
> let f () =
> let x = 0 in
> ()
> C-u 17 C-b
>
> This starts a fresh emacs, loads the tuareg mode, enables
> show-paren-mode, enters some ocaml code, and puts the point on a 'let'
> keyword.
>
> In this situation, it would be helpful if the 'let' and corresponding
> 'in' were highlighted in 'show-paren-match-face'. And similarly for
> "fun", "if", "match", and "try".
(I'm going through old bug reports that unfortunately weren't resolved
at the time.)
I think this is rather beyond the scope of show-paren-mode (which is a
pretty simple mode that just blinks parentheses, and not much more). A
new different mode that relies on language semantics to identify these
things would be nice, but I don't think there's anything actionable to
be done here, so I'm closing this bug report.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-12 1:44 ` Lars Ingebrigtsen
@ 2022-05-12 5:36 ` Eli Zaretskii
2022-05-12 22:52 ` Yuan Fu
0 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2022-05-12 5:36 UTC (permalink / raw)
To: Lars Ingebrigtsen, Yuan Fu; +Cc: 19080, josh
> Cc: 19080@debbugs.gnu.org
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Thu, 12 May 2022 03:44:43 +0200
>
> > This starts a fresh emacs, loads the tuareg mode, enables
> > show-paren-mode, enters some ocaml code, and puts the point on a 'let'
> > keyword.
> >
> > In this situation, it would be helpful if the 'let' and corresponding
> > 'in' were highlighted in 'show-paren-match-face'. And similarly for
> > "fun", "if", "match", and "try".
>
> (I'm going through old bug reports that unfortunately weren't resolved
> at the time.)
>
> I think this is rather beyond the scope of show-paren-mode (which is a
> pretty simple mode that just blinks parentheses, and not much more).
Indeed.
> A new different mode that relies on language semantics to identify
> these things would be nice, but I don't think there's anything
> actionable to be done here, so I'm closing this bug report.
We could perhaps add a new feature, based on tree-sitter, to highlight
a block of code, where the block is defined by PL rules, not by
parens, braces, and similar simple syntactic elements.
Yuan, WDYT? Can this be added to the tree-sitter branch perhaps?
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-12 5:36 ` Eli Zaretskii
@ 2022-05-12 22:52 ` Yuan Fu
2022-05-13 5:52 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-05-12 22:52 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 19080, Lars Ingebrigtsen, josh
> On May 11, 2022, at 10:36 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>
>> Cc: 19080@debbugs.gnu.org
>> From: Lars Ingebrigtsen <larsi@gnus.org>
>> Date: Thu, 12 May 2022 03:44:43 +0200
>>
>>> This starts a fresh emacs, loads the tuareg mode, enables
>>> show-paren-mode, enters some ocaml code, and puts the point on a 'let'
>>> keyword.
>>>
>>> In this situation, it would be helpful if the 'let' and corresponding
>>> 'in' were highlighted in 'show-paren-match-face'. And similarly for
>>> "fun", "if", "match", and "try".
>>
>> (I'm going through old bug reports that unfortunately weren't resolved
>> at the time.)
>>
>> I think this is rather beyond the scope of show-paren-mode (which is a
>> pretty simple mode that just blinks parentheses, and not much more).
>
> Indeed.
>
>> A new different mode that relies on language semantics to identify
>> these things would be nice, but I don't think there's anything
>> actionable to be done here, so I'm closing this bug report.
>
> We could perhaps add a new feature, based on tree-sitter, to highlight
> a block of code, where the block is defined by PL rules, not by
> parens, braces, and similar simple syntactic elements.
>
> Yuan, WDYT? Can this be added to the tree-sitter branch perhaps?
That sounds interesting, and it should be easy. But what do we want the API be? First of all, should we make a separate mode or extend show-paren-mode? Extending show-paren-mode entails doing some non-trivial refactoring to paren.el. That is also kind of the situation for many existing packages, I think, that adding tree-sitter “backend” needs refactoring existing code non-trivially.
Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-12 22:52 ` Yuan Fu
@ 2022-05-13 5:52 ` Eli Zaretskii
2022-05-13 11:48 ` Josh Berdine
2022-05-14 5:05 ` Yuan Fu
0 siblings, 2 replies; 8+ messages in thread
From: Eli Zaretskii @ 2022-05-13 5:52 UTC (permalink / raw)
To: Yuan Fu; +Cc: 19080, larsi, josh
> From: Yuan Fu <casouri@gmail.com>
> Date: Thu, 12 May 2022 15:52:14 -0700
> Cc: Lars Ingebrigtsen <larsi@gnus.org>,
> josh@berdine.net,
> 19080@debbugs.gnu.org
>
> > We could perhaps add a new feature, based on tree-sitter, to highlight
> > a block of code, where the block is defined by PL rules, not by
> > parens, braces, and similar simple syntactic elements.
> >
> > Yuan, WDYT? Can this be added to the tree-sitter branch perhaps?
>
> That sounds interesting, and it should be easy. But what do we want the API be? First of all, should we make a separate mode or extend show-paren-mode? Extending show-paren-mode entails doing some non-trivial refactoring to paren.el.
IMO, it should be a separate minor mode; show-paren-mode is not
necessarily about program blocks, since parentheses appear not only
(and mostly not) as block delimiters.
The API should be probably: given a buffer POSITION, return the 2
positions of the innermost enclosing block, or nil if POSITION is not
in any block. A possible extension could be to return a list of
position pairs that provide also the blocks enclosed inside the
POSITION's block.
> I think, that adding tree-sitter “backend” needs refactoring existing code non-trivially.
If show-paren-mode would want to use tree-sitter, it will need
refactoring, yes. Which other packages you envision could benefit
from using tree-sitter?
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-13 5:52 ` Eli Zaretskii
@ 2022-05-13 11:48 ` Josh Berdine
2022-05-14 5:05 ` Yuan Fu
1 sibling, 0 replies; 8+ messages in thread
From: Josh Berdine @ 2022-05-13 11:48 UTC (permalink / raw)
To: Eli Zaretskii, Lars Ingebrigtsen, Yuan Fu; +Cc: 19080
>> I think, that adding tree-sitter “backend” needs refactoring existing code non-trivially.
>
> If show-paren-mode would want to use tree-sitter, it will need
> refactoring, yes. Which other packages you envision could benefit
> from using tree-sitter?
For some context, this originally came up in discussion of
https://github.com/ocaml/tuareg/issues/26 and the related https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19079 . This issue is about incorrect highlighting due to an smie bug, which tuareg-mode uses. As far as I understand, the incorrect highlighting prevents implementing navigation functions e.g. from a `let` to the matching `in`. I expect that tree-sitter can have a better understanding of the actual code structure than smie, and so tuareg-mode would be a package that could benefit. There is an ocaml (the language tuareg-mode supports) grammar for tree-sitter. I don't have the expertise to volunteer to work on that though.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-13 5:52 ` Eli Zaretskii
2022-05-13 11:48 ` Josh Berdine
@ 2022-05-14 5:05 ` Yuan Fu
2022-05-14 8:00 ` Visuwesh
1 sibling, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-05-14 5:05 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 19080, larsi, josh
> On May 12, 2022, at 10:52 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>
>> From: Yuan Fu <casouri@gmail.com>
>> Date: Thu, 12 May 2022 15:52:14 -0700
>> Cc: Lars Ingebrigtsen <larsi@gnus.org>,
>> josh@berdine.net,
>> 19080@debbugs.gnu.org
>>
>>> We could perhaps add a new feature, based on tree-sitter, to highlight
>>> a block of code, where the block is defined by PL rules, not by
>>> parens, braces, and similar simple syntactic elements.
>>>
>>> Yuan, WDYT? Can this be added to the tree-sitter branch perhaps?
>>
>> That sounds interesting, and it should be easy. But what do we want the API be? First of all, should we make a separate mode or extend show-paren-mode? Extending show-paren-mode entails doing some non-trivial refactoring to paren.el.
>
> IMO, it should be a separate minor mode; show-paren-mode is not
> necessarily about program blocks, since parentheses appear not only
> (and mostly not) as block delimiters.
Cool! I can do whatever I want then ;-)
>
> The API should be probably: given a buffer POSITION, return the 2
> positions of the innermost enclosing block, or nil if POSITION is not
> in any block. A possible extension could be to return a list of
> position pairs that provide also the blocks enclosed inside the
> POSITION's block.
Ok.
>
>> I think, that adding tree-sitter “backend” needs refactoring existing code non-trivially.
>
> If show-paren-mode would want to use tree-sitter, it will need
> refactoring, yes. Which other packages you envision could benefit
> from using tree-sitter?
I remember looking at some structured editing tool, but I can’t think of one on top of my head :-(
Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords
2022-05-14 5:05 ` Yuan Fu
@ 2022-05-14 8:00 ` Visuwesh
0 siblings, 0 replies; 8+ messages in thread
From: Visuwesh @ 2022-05-14 8:00 UTC (permalink / raw)
To: Yuan Fu; +Cc: 19080, Eli Zaretskii, larsi, josh
[வெள்ளி மே 13, 2022] Yuan Fu wrote:
>> On May 12, 2022, at 10:52 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>>
>> [...]
>>
>>> I think, that adding tree-sitter “backend” needs refactoring
>>> existing code non-trivially.
>>
>> If show-paren-mode would want to use tree-sitter, it will need
>> refactoring, yes. Which other packages you envision could benefit
>> from using tree-sitter?
>
> I remember looking at some structured editing tool, but I can’t think
> of one on top of my head :-(
>
I at least know of two:
1. https://github.com/mickeynp/combobulate
2. https://github.com/meain/evil-textobj-tree-sitter/
> Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-05-14 8:00 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-17 11:34 bug#19080: 24.4; wish: enable show-paren-mode to highlight matching same-level keywords Josh Berdine
2022-05-12 1:44 ` Lars Ingebrigtsen
2022-05-12 5:36 ` Eli Zaretskii
2022-05-12 22:52 ` Yuan Fu
2022-05-13 5:52 ` Eli Zaretskii
2022-05-13 11:48 ` Josh Berdine
2022-05-14 5:05 ` Yuan Fu
2022-05-14 8:00 ` Visuwesh
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).