I particularly like how in Acme, when selection is zero-width ("empty"), it is the cursor. Conversely selection can be extended from cursor in any direction.
As a side effect, this greatly simplifies the API for manipulating both.
I actually used this pattern as well and I really like it. I store another property called `mark_idx`. When `cursor_idx` and `mark_idx` are the same then it's just a cursor. When they differ, the range between them is the selection.
Comments
I particularly like how in Acme, when selection is zero-width ("empty"), it is the cursor. Conversely selection can be extended from cursor in any direction.
As a side effect, this greatly simplifies the API for manipulating both.
I actually used this pattern as well and I really like it. I store another property called `mark_idx`. When `cursor_idx` and `mark_idx` are the same then it's just a cursor. When they differ, the range between them is the selection.
What is Acme in this context? Id like to get an idea of what you mean.
the acme text editor, originally from plan9
http://acme.cat-v.org/ https://www.youtube.com/watch?v=dP1xVpMPn8M
Thank you!
https://plan9.io/sys/doc/acme/acme.html
Thanks!