Introduction
Introduction Statistics Contact Development Disclaimer Help
tFix positioning of cursor after deleting characters - ledit - Text editor (WIP)
git clone git://lumidify.org/ledit.git (fast, but not encrypted)
git clone https://lumidify.org/git/ledit.git (encrypted, but very slow)
Log
Files
Refs
README
LICENSE
---
commit b4ed6ddf9920d90814860156ed32a40404ece243
parent 3895a14f2fb3bcc35ba842e259074a67adddb8a1
Author: lumidify <[email protected]>
Date: Fri, 14 May 2021 21:22:31 +0200
Fix positioning of cursor after deleting characters
Diffstat:
M buffer.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
---
diff --git a/buffer.c b/buffer.c
t@@ -494,15 +494,6 @@ ledit_delete_range(
}
delete_line_section(buffer, line_index1, b1, b2 - b1);
*new_line_ret = line_index1;
- ledit_line *ll = ledit_get_line(buffer, line_index1);
- /* FIXME: where should this be done? */
- /* FIXME: also do this below in the else statement */
- if (buffer->state->mode == NORMAL && b1 == ll->len && …
- /* FIXME: use grapheme instead of character! */
- b1 = ll->len - 1;
- while (b1 > 0 && ((ll->text[b1] & 0xC0) == 0x8…
- b1--;
- }
*new_byte_ret = b1;
} else {
int l1, l2, b1, b2;
t@@ -531,5 +522,24 @@ ledit_delete_range(
*new_byte_ret = b1;
ledit_delete_line_entries(buffer, l1 + 1, l2);
}
+ /* move back one grapheme if at end of line and in normal mode…
+ ledit_line *final_line = ledit_get_line(buffer, *new_line_ret);
+ if (buffer->state->mode == NORMAL &&
+ *new_byte_ret == final_line->len &&
+ *new_byte_ret > 0) {
+ int nattrs;
+ const PangoLogAttr *attrs =
+ pango_layout_get_log_attrs_readonly(final_line->la…
+ int cur = nattrs - 2;
+ (*new_byte_ret)--;
+ while (*new_byte_ret > 0 && ((final_line->text[*new_by…
+ (*new_byte_ret)--;
+ while (*new_byte_ret > 0 && cur > 0 && !attrs[cur].is_…
+ cur--;
+ (*new_byte_ret)--;
+ while (*new_byte_ret > 0 && ((final_line->text…
+ (*new_byte_ret)--;
+ }
+ }
}
}
You are viewing proxied material from lumidify.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.