Skip to content

Comments

Softwrap improvements#2076

Merged
zyedidia merged 11 commits intomicro-editor:masterfrom
dmaluka:softwrap-improvement2
May 12, 2021
Merged

Softwrap improvements#2076
zyedidia merged 11 commits intomicro-editor:masterfrom
dmaluka:softwrap-improvement2

Conversation

@dmaluka
Copy link
Collaborator

@dmaluka dmaluka commented Apr 8, 2021

A number of improvements for softwrap and more:

These changes depend on each other, so I've put them in a single PR.

Fixes #1598
Fixes #264
Fixes #1644
Fixes #645
Fixes #1979

dmaluka added 11 commits April 8, 2021 23:53
Fixes issue with the usage of a slightly incorrect buffer height value
(v.Height should be v.Height-1 if statusline is displayed).

Also, to avoid too many duplications, the code reorganized a little:
buffer display params (width, height, gutter offset and others) are
calculated in a single place.
Fix displaying tabs and wide runes which don't fit in the window.
Don't overwrite the vertical divider and the adjacent window.

- For tabs: display only as many of the tab's spaces as fit in the window.

- For wide runes: if a rune doesn't fit, don't display it in this line at all.
  If softwrap is on, display this rune in the next line.

Fixes micro-editor#1979
VLoc allows any location in the buffer to be represented as a visual
location in the linewrapped buffer. In particular, this is useful
for implementing moving cursor up and down within a wrapped line.
Modified behavior of CursorUp, CursorDown, CursorPageUp etc:
if softwrap is enabled, cursor moves by visual lines, not logical lines.

TODO: implement it also for Home and End keys: move cursor to the
visual start or end of a line. I haven't implemented it for now, because
I'm not sure what should be the behavior of StartOfTextToggle then
(considering that Home key is bound to StartOfTextToggle by default).

Fixes micro-editor#1598
Now that we have LocFromVLoc, we can radically simplify the code of LocFromVisual.
Less duplication, less potential bugs.
Don't highlight space characters at the right edge which are used just
for padding after line break in word wrapping, i.e. don't correspond to
any real characters in the buffer.

This makes it look nicer e.g. when selecting word-wrapped text.
BufView returns not only the buffer's width and height but also its
x,y position. It may be useful e.g. for checking if a mouse click was
on the actual buffer or ourside it, e.g. on the gutter.
Let's return absolute X, Y values, rather than relative to the bufwindow.
@ghost
Copy link

ghost commented Apr 29, 2021

Implemented moving cursor up/down within a wrapped line (#1598)

Thank you so much! This will be awesome!

@zyedidia
Copy link
Member

This is great! Thank you for the contribution!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants