unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Tracking buffer positions across time, without markers (was Re: PL support)
@ 2020-05-09 19:47 Clément Pit-Claudel
  2020-05-09 21:38 ` João Távora
  0 siblings, 1 reply; 25+ messages in thread
From: Clément Pit-Claudel @ 2020-05-09 19:47 UTC (permalink / raw)
  To: Emacs developers, João Távora

Hi João,

On 09/05/2020 13.08, João Távora wrote:
> Since exchanging information about source-file changes is largely a
> solved problem, as soon as servers start declaring support the new
> syntax highlighting extensions, it's is a question of applying the
> text properties in an efficient manner.


Can you clarify what you mean by 'a solved problem'?  One long-standing issue that I've had with Emacs is that I don't know of a way to track buffer positions without adding markers.  Here's a concrete example:

I start with a buffer that contains "int foo ()", and send that to a subprocess (say a syntax highlighter, for example).  It returns [0:3:type; 4:7:name].  In the meantime, the user has inserted more text in the buffer, which now contains "static int foo ()".  If I apply the highlighting as-is, it will be all wrong!

Visual Studio has a nice API for this: there is a way to snapshot a buffer, and to translate positions between two snapshots.  In my example, this allows you to translate 0:3 in the original buffer to 7:10 in the new one.

I don't think Emacs has such a facility at the moment — did I miss something?

I've been thinking of building one for a while.  I think it can be done entirely in ELisp, by using the undo list: snapshots would be pointers into the undo list, and positions could be translated by iterating over all undo list entries between two snapshots and adjusting positions according to each undo-list entry.

Are you using something different in eglot? Or are you assuming that calls are fast enough that this isn't a problem?  I ran into this problem with very slow subprocesses, like running an SMT solver.

Clément.



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

end of thread, other threads:[~2020-05-11 17:20 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-09 19:47 Tracking buffer positions across time, without markers (was Re: PL support) Clément Pit-Claudel
2020-05-09 21:38 ` João Távora
2020-05-09 22:22   ` Clément Pit-Claudel
2020-05-09 23:26     ` João Távora
2020-05-10  3:45       ` Clément Pit-Claudel
2020-05-10  4:32         ` Eli Zaretskii
2020-05-10 19:27           ` Clément Pit-Claudel
2020-05-10 19:42             ` Drew Adams
2020-05-10 19:49             ` Eli Zaretskii
2020-05-10 20:52               ` Clément Pit-Claudel
2020-05-11 14:24                 ` Eli Zaretskii
2020-05-11 15:03                   ` Clément Pit-Claudel
2020-05-11 15:25                   ` Stefan Monnier
2020-05-10 20:46             ` Stefan Monnier
2020-05-11  2:27               ` Eli Zaretskii
2020-05-11  3:19                 ` Stefan Monnier
2020-05-11  0:17             ` Vladimir Sedach
2020-05-11 14:18               ` Clément Pit-Claudel
2020-05-11 15:16                 ` João Távora
2020-05-11 15:33                   ` Clément Pit-Claudel
2020-05-11 15:44                     ` João Távora
2020-05-11 16:02                       ` Clément Pit-Claudel
2020-05-11 16:11                         ` João Távora
2020-05-11 17:20                           ` Stefan Monnier
2020-05-11 14:39               ` Eli Zaretskii

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