bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#17684: bug#22873: #22873 (multiple fake cursors); and, #17684 (cross


From: Keith David Bershatsky
Subject: bug#17684: bug#22873: #22873 (multiple fake cursors); and, #17684 (crosshairs / fill-column).
Date: Wed, 30 Sep 2020 20:54:14 -0700

Thank you, Lars, for having a look at feature requests 22873 and 17684.  The 
crosshairs feature to track the cursor position (17684) was the motivation for 
implementing the framework to create multiple fake cursors (22873); i.e., the 
crosshairs, and visible fill-column indicator that can intersect through 
characters at any pixel X coordinate are, are all drawn with fake cursors.  The 
draft proof concept works for GUI versions of Emacs on X11, Windows and OSX.  I 
haven't done anything much since 07/14/2019 except fix some bugs, some 
important, some minor.  Drew Adams contacted me several months ago and 
requested that I change `crosshairs.el` to anything else since he has a 
crosshairs library on wiki, and he didn't want any potential confusion.  There 
is nothing better I could think of as a name for the 17684 Lisp library and 
since crosshairs goes against the wishes of Drew, I just went ahead and changed 
the name to +-mode.el, because the plus sign looks like a crosshairs, and I use 
the plus sign as the mode-line minor-mode lighter.

22873 (multiple cursors) is presently just a framework to generate fake cursors 
anywhere on the window-body.  Nothing has been written yet to perform any type 
of user command/function action at each location of fake cursors.  I have been 
using 22873 to replace the visual overlays used by Magnar Sveen in his Lisp 
implementation of multiple-cursors; i.e., instead of visible overlays, Emacs 
generates a fake cursor at each location (which can change cursor colors and 
cursor shapes, if so desired, such as yellow for an even column and red for an 
odd column).

Emacs was set up by the forefathers with some window pointers to temporarily 
save values, such as the coordinates of the real cursor.  I felt this was 
somewhat confusing and it seemed to me like an "afterthought" (an after the 
fact implementation) to avoid the need to add new arguments to existing 
functions in order to pass the values needed.  Without modifying the existing 
system as to the real cursor, I did away with all that as it applies to fake 
cursors by creating additional arguments in the relevant new functions to pass 
the values where needed.

The matrix of multiple fake cursors is somewhat complex, at least for me, and 
was implemented with the generous help of Alex Gramiak on the Emacs Devel 
mailing list; including, but not limited to dynamic memory management for the 
caches of fake cursors.  This did away with all of the problems I had 
previously encountered with a slow-down due to constant garbage collection for 
having too many Lisp Objects.  Based upon the help provided by Alex G., 
features 17684/22873 are now really pretty darn fast in my opinion.

Eli Z. has been very kind and generous with his time over the years to help me 
through most of the hard issues that I encountered, and with his help, the 
Emacs Devel team even fixed a few bugs in the master along the way (which I 
helped discover while working on 17684/22873).

In the comments at the outset of the most recent post to 17684/22873, there is 
a "todo list" and also some notes regarding how these features work.

In order to reduce as much as possible any modifications to existing functions 
in the core of Emacs, I copied a lot of those functions functions, changed 
their names, added additional arguments as needed (supra), and modified some of 
the body as needed.

Others on the Emacs Devel team may undoubtedly have an entirely different 
viewpoint / approach regarding the implementation of multiple fake cursors, but 
it was something that I felt I could not live without, so I went ahead and 
created something that I have been using on a daily basis for the past couple 
of years (perhaps a little longer).  I also use Magnar's multiple-cursors 
library several times a day, and feature 22873 replaces his visible overlays 
with fake cursors.

I do not know what would be needed to bring 17684 / 22873 current from 
07/14/2019 (master branch) to the present date.  The last time I brought 
17684/22873 forward to the then current date of 07/14/2019, I encountered one 
or more bugs in the master branch and it took a few weeks to resolve -- which 
fix(es) would have been impossible without the help of Eli Z. and a few others 
in the Emacs Devel.  If, by chance, I encounter undiscovered bugs in the master 
branch that pose significant obstacles to moving forward to the current commit 
date, then it could take several weeks; it just depends ...  This stuff is 
pretty complex for me, and I would even have to study what I previously did to 
refresh my memory again regarding how everything works as it relates to 
17684/22873.

Recently, things at my day job have picked back up again and I haven't had a 
whole lot of free time lately.

There are links to some screenshots of 17684/22873 and a few videos of those 
features running on the different OS platforms if anyone would like to take a 
look -- the links are in the most recent post to 17684/22873.

Thanks,

Keith

On Sep 30, 2020, at 8:00 PM, Lars Ingebrigtsen wrote:

> Keith David Bershatsky <esq@lawlist.com> writes:
> 
>> VERSION:  022.008 [05/02/2020]
>> 
>> CHANGELOG:
>> 
>> +(defgroup +-mode nil
>> +  "Faces for the vertical ruler."
>> +  :group 'convenience)
> 
> This is a huge patch set, and I have not tried it.  It seems like the
> general consensus is that, yes, we would like to have multiple cursors,
> but I'm not sure what this has to do with crosshairs?  I've just lightly
> skimmed this thread, though...
> 
> Anyway, I'm not sure what the status is here.  The naming standard
> doesn't seem to follow Emacs convention -- there's a mode called
> `+-mode', for instance, which would have to be renamed...
> 
> Keith, is this still a work in progress, or is it something you think is
> ready to go, and would like a code review on?
> 
> -- 
> (domestic pets only, the antidote for overdose, milk.)
>   bloggy blog: http://lars.ingebrigtsen.no






reply via email to

[Prev in Thread] Current Thread [Next in Thread]