[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