чување 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:
| M | TODO | | | 2 | ++ |
| M | sled.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;
}