From 4764653ba333f015bc2f87fd2248aab6b6185868 Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Fri, 8 Nov 2024 15:36:13 +0100 Subject: Fix col offset again Was not doing the correct thing when multiple lines was added. --- src/dged/buffer.c | 2 +- test/buffer.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/dged/buffer.c b/src/dged/buffer.c index 91c1a14..d4501b7 100644 --- a/src/dged/buffer.c +++ b/src/dged/buffer.c @@ -545,7 +545,7 @@ struct location buffer_add(struct buffer *buffer, struct location at, cols_added += visual_char_width(codepoint, tab_width); } final = buffer_clamp(buffer, (int64_t)at.line + lines_added, - (int64_t)at.col + cols_added); + (int64_t)(lines_added > 0 ? 0 : at.col) + cols_added); struct location final_bytes = buffer_location_to_byte_coords(buffer, final); undo_push_add( diff --git a/test/buffer.c b/test/buffer.c index f40166e..514671b 100644 --- a/test/buffer.c +++ b/test/buffer.c @@ -37,6 +37,15 @@ static void test_add(void) { ASSERT(loc.line == 1 && loc.col == 16, "Expected to be at end of second line"); + // test newline + buffer_clear(&b); + txt = "some chars"; + loc = buffer_add(&b, (struct location){.line = 0, .col = 0}, (uint8_t *)txt, + strlen(txt)); + loc = buffer_newline(&b, (struct location){.line = 0, .col = 4}); + ASSERT(loc.line == 1 && loc.col == 0, + "Expected to be at start of second line after inserting newline"); + // test callback uint32_t hook_id = buffer_add_insert_hook(&b, add_callback, NULL); buffer_add(&b, (struct location){.line = 0, .col = 0}, (uint8_t *)"hej", 3); -- cgit v1.2.3