From: "Mattias Engdegård" <mattias.engdegard@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Michael Heerdegen <michael_heerdegen@web.de>,
Eli Zaretskii <eliz@gnu.org>,
72830@debbugs.gnu.org, Juri Linkov <juri@linkov.net>
Subject: bug#72830: Big rectangular selections are slow
Date: Sun, 22 Sep 2024 17:16:20 +0200 [thread overview]
Message-ID: <3413563D-0343-4764-8D44-DAE3D3642A80@gmail.com> (raw)
In-Reply-To: <jwvwmj36b6r.fsf-monnier+emacs@gnu.org>
22 sep. 2024 kl. 16.12 skrev Stefan Monnier <monnier@iro.umontreal.ca>:
> IIRC from the last time I looked at that code, I got the impression that
> the design was made [pun ahead!] primarily for the CLIPBOARD selection
> and *should* work something like this:
> - when we make a new selection, we tell X11 that we own the CLIPBOARD.
> This should be an O(1) operation.
> - when the selection changes because we move point or mark, we don't
> need to do anything.
> - we get the content of that selection (an O(N) operation) only if/when
> X11 asks for it.
> - in order to still be able to send the CLIPBOARD's content after the
> selection has disappeared, we pay the O(N) cost when the region is
> deactivated and "squirrelled away" (like you say) that content.
I don't think an X11 client should ever claim CLIPBOARD ownership merely for marking a selection, as opposed to issuing a 'Copy[ to clipboard]' operation, but seem to recall that it did happen with some broken clients. PRIMARY is indeed different and that's probably what confused programmers back in the day, especially since old clients like Xterm emphasised the use of PRIMARY.
> So the big rectangular selections should slow down only steps 3 and
> 4 but not step 1 or 2. And as you point out, maybe step 4 could/should
> be skipped for PRIMARY, tho I'm not sure in which cases it would
> be beneficial (beside those cases where the region is so large that the
> O(N) cost is a problem).
The O(N) cost in time and space is a problem. X11 convention is that PRIMARY is available for as long as the selection is visibly marked in the client.
[ What happens if another client claims PRIMARY? The first (losing) client typically has two choices: either remove the selection so that the user sees that the selection is no more (the classic Xterm way), or repaint it in a 'local-only' colour to show that it can still be used for other purposes. ]
> Of course, if needed, maybe the step 4 could be made faster by
> squirreling away not the exact rectangular region, but something that
> can be computed more quickly and from which we can later still extract
> the exact rectangular region if/when needed.
Yes, we'd need some sort of current-selection-extent object. The question is, what should its lifetime be?
A. For as long as the selection is active
B. Until buffer is modified
C. Indefinitely, using absolute buffer offsets
D. Indefinitely, using markers
I'd suggest A because that's closest to X11 practice. B would be doable. C and D are taking it too far and recovering a rectangle would be a mess.
next prev parent reply other threads:[~2024-09-22 15:16 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 12:39 bug#72830: Big rectangular selections are slow Mattias Engdegård
2024-08-27 13:48 ` Eli Zaretskii
2024-08-27 14:04 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-27 16:42 ` Mattias Engdegård
2024-08-27 17:47 ` Eli Zaretskii
2024-08-27 19:16 ` Eli Zaretskii
2024-08-27 18:23 ` Juri Linkov
2024-08-27 18:55 ` Drew Adams via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-27 19:03 ` Eli Zaretskii
2024-08-27 19:44 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-29 3:56 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-29 10:22 ` Mattias Engdegård
2024-08-29 11:18 ` Mattias Engdegård
2024-08-29 8:09 ` Mattias Engdegård
2024-08-29 20:04 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-30 15:20 ` Mattias Engdegård
2024-09-20 12:53 ` Mattias Engdegård
2024-09-21 2:07 ` Stefan Kangas
2024-09-21 8:26 ` Eli Zaretskii
2024-09-21 3:05 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-22 13:27 ` Mattias Engdegård
2024-09-22 14:12 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-22 15:16 ` Mattias Engdegård [this message]
2024-09-22 15:32 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-22 16:22 ` Mattias Engdegård
2024-09-22 17:37 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-23 10:42 ` Mattias Engdegård
2024-08-29 0:45 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-29 3:39 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-29 4:44 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-29 0:40 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3413563D-0343-4764-8D44-DAE3D3642A80@gmail.com \
--to=mattias.engdegard@gmail.com \
--cc=72830@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=juri@linkov.net \
--cc=michael_heerdegen@web.de \
--cc=monnier@iro.umontreal.ca \
/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 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).