sled

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

чување 987ff09dc98949a895d4e7e840bc8719cc35cbe8
родитељ c0b84583184467c41dd350d32be4d8a7e21c10de
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Sun, 27 Feb 2022 00:43:16 +0100

sled.c(erase_line): Fix positioning, add setting DrawState.dirty

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
MTODO | 2++
Msled.c | 29+++++++++++++++++++++++------
измењених датотека: 2, додавања: 25(+), брисања: 6(-)

diff --git a/TODO b/TODO @@ -1,6 +1,8 @@ TODO ==== + [ ] Move positioning logic to separate function + [x] Investigate DrawState.first_shown_column [/] Add vi V diff --git a/sled.c b/sled.c @@ -777,7 +777,7 @@ erase_line(struct DrawState* state) { *state->buffer[0].text = 0; state->buffer[0].length = 0; - goto erase_line_done; + return 0; } for (size_t row = state->row; row < state->rows_count - 1; row++) { @@ -787,12 +787,29 @@ erase_line(struct DrawState* state) } *state->buffer[state->rows_count - 1].text = 0; state->buffer[state->rows_count - 1].length = 0; + if (state->row == state->rows_count - 1) + state->row--; + if (state->first_shown_row > state->row) + state->first_shown_row = state->row; + 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); state->rows_count--; - -erase_line_done: - state->column = 0; - state->display_column = 0; - state->saved_column = -1; + state->dirty = 1; return 0; }