sled

Једноставни уређивач текста
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 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:
Msled.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;