Introduction
Introduction Statistics Contact Development Disclaimer Help
tRespect cursor x position when scrolling (Ctrl-d/Ctrl-u) - ledit - Text editor…
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 32ba7c8e9dbb2f7f4327b2a989e07d02e84ee2e1
parent e76057dd60a70a13d5ede8274d504494d2ee70a8
Author: lumidify <[email protected]>
Date: Wed, 17 Nov 2021 23:38:54 +0100
Respect cursor x position when scrolling (Ctrl-d/Ctrl-u)
Diffstat:
M buffer.c | 1 +
M keys_basic.c | 9 +++++----
2 files changed, 6 insertions(+), 4 deletions(-)
---
diff --git a/buffer.c b/buffer.c
t@@ -1456,6 +1456,7 @@ ledit_pos_to_x_softline(ledit_line *line, int pos, int *…
/* if in normal mode, change position to the middle of the
current rectangle so that moving around won't jump weirdly */
/* FIXME: also in visual? */
+ /* FIXME: this is too much magic for my taste */
if (line->parent_buffer->common->mode == NORMAL) {
PangoRectangle rect;
pango_layout_index_to_pos(line->layout, pos, &rect);
diff --git a/keys_basic.c b/keys_basic.c
t@@ -642,14 +642,15 @@ move_to_line(ledit_buffer *buffer, char *text, int len) {
}
/* FIXME: should these scrolling functions change behavior when hard_line_base…
-/* FIXME: preserve x position on these scrolling functions */
static void
scroll_lines(ledit_buffer *buffer, int lines, int dir) {
int final_lines;
int text_w, text_h;
ledit_line *ll = ledit_buffer_get_line(buffer, buffer->cur_line);
- int x, y, h;
+ int x, y, h, sli;
ledit_buffer_get_cursor_pixel_pos(buffer, buffer->cur_line, buffer->cu…
+ /* get the middle position of char */
+ ledit_pos_to_x_softline(ll, buffer->cur_index, &x, &sli);
long abs_pos = ll->y_offset + y;
ledit_window_get_textview_size(buffer->window, &text_w, &text_h);
if (lines > 0)
t@@ -659,7 +660,6 @@ scroll_lines(ledit_buffer *buffer, int lines, int dir) {
else
final_lines = text_h / h / 2;
ledit_buffer_wipe_line_cursor_attrs(buffer, buffer->cur_line);
- int sli; /* FIXME: set proper cursor position */
get_new_line_softline(
buffer, buffer->cur_line, buffer->cur_index,
dir < 0 ? -final_lines : final_lines,
t@@ -667,7 +667,8 @@ scroll_lines(ledit_buffer *buffer, int lines, int dir) {
);
int start, end;
ledit_buffer_get_softline_bounds(buffer, buffer->cur_line, sli, &start…
- buffer->cur_index = start;
+ ll = ledit_buffer_get_line(buffer, buffer->cur_line);
+ ledit_x_softline_to_pos(ll, x, sli, &buffer->cur_index);
ledit_buffer_get_cursor_pixel_pos(buffer, buffer->cur_line, buffer->cu…
long new_abs_pos = ll->y_offset + y;
ledit_buffer_scroll(buffer, buffer->display_offset + (new_abs_pos - ab…
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.