чување 62978e66ef8bf991ae3952914fe0e05558399822
родитељ 3a1b22049eed8ab79c625efcac75f089eda3f2b5
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Mon, 21 Feb 2022 18:17:26 +0100
Add horizontal positioning logic to move_top/move_bottom
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | sled.c | | | 34 | ++++++++++++++++++++++++++++++++++ |
измењених датотека: 1, додавања: 34(+), брисања: 0(-)
diff --git a/sled.c b/sled.c
@@ -497,6 +497,23 @@ move_top(struct DrawState* state)
{
state->row = 0;
state->first_shown_row = 0;
+ if (state->saved_column == -1)
+ state->saved_column = state->display_column;
+ size_t dlen = display_length(state, state->buffer[state->row].text,
+ state->buffer[state->row].length);
+ if (dlen < state->saved_column)
+ state->display_column = dlen;
+ else
+ state->display_column = state->saved_column;
+ state->column = buffer_length(state, state->buffer[state->row].text,
+ state->display_column);
+ if (state->first_shown_column > state->display_column)
+ state->first_shown_column = state->display_column;
+ if (state->first_shown_column + state->maxx - 1 < state->display_column)
+ state->first_shown_column
+ = state->display_column - state->maxx + 1;
+ state->display_column = display_length(state,
+ state->buffer[state->row].text, state->column);
if (state->in_selection_mode)
{
state->sel_end_row = state->row;
@@ -726,6 +743,23 @@ move_bottom(struct DrawState* state)
state->row = state->rows_count - 1;
state->first_shown_row
= state->row > state->maxy ? state->row - state->maxy + 2 : 0;
+ if (state->saved_column == -1)
+ state->saved_column = state->display_column;
+ size_t dlen = display_length(state, state->buffer[state->row].text,
+ state->buffer[state->row].length);
+ if (dlen < state->saved_column)
+ state->display_column = dlen;
+ else
+ state->display_column = state->saved_column;
+ state->column = buffer_length(state, state->buffer[state->row].text,
+ state->display_column);
+ if (state->first_shown_column > state->display_column)
+ state->first_shown_column = state->display_column;
+ if (state->first_shown_column + state->maxx - 1 < state->display_column)
+ state->first_shown_column
+ = state->display_column - state->maxx + 1;
+ state->display_column = display_length(state,
+ state->buffer[state->row].text, state->column);
if (state->in_selection_mode)
{
state->sel_end_row = state->row;