diff options
| author | Albert Cervin <albert@acervin.com> | 2024-02-05 15:00:35 +0100 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2024-02-12 09:46:04 +0100 |
| commit | 84a29094d497cf56c4efd5505efb044b822b89cd (patch) | |
| tree | c3e17ef67cafc58ed59e576eaa34e4b515038321 /src/dged/buffer.c | |
| parent | 9be0d9bddd6189ce82ea3775571b5b94d6e168ca (diff) | |
| download | dged-84a29094d497cf56c4efd5505efb044b822b89cd.tar.gz dged-84a29094d497cf56c4efd5505efb044b822b89cd.tar.xz dged-84a29094d497cf56c4efd5505efb044b822b89cd.zip | |
Fix final newline displaying
Diffstat (limited to 'src/dged/buffer.c')
| -rw-r--r-- | src/dged/buffer.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/dged/buffer.c b/src/dged/buffer.c index 0120cb0..a512c60 100644 --- a/src/dged/buffer.c +++ b/src/dged/buffer.c @@ -215,6 +215,13 @@ static bool moveh(struct buffer *buffer, int64_t coldelta, return true; } +static void strip_final_newline(struct buffer *b) { + uint32_t nlines = text_num_lines(b->text); + if (nlines > 0 && text_line_length(b->text, nlines - 1) == 0) { + text_delete(b->text, nlines - 1, 0, nlines - 1, 1); + } +} + static void buffer_read_from_file(struct buffer *b) { struct stat sb; char *fullname = to_abspath(b->filename); @@ -245,6 +252,9 @@ static void buffer_read_from_file(struct buffer *b) { fclose(file); b->last_write = sb.st_mtim; + + // if last line is empty, remove it + strip_final_newline(b); } else { minibuffer_echo("Error opening %s: %s", b->filename, strerror(errno)); free(fullname); @@ -510,6 +520,10 @@ struct location buffer_set_text(struct buffer *buffer, uint8_t *text, text_clear(buffer->text); text_append(buffer->text, text, nbytes, &lines, &cols); + + // if last line is empty, remove it + strip_final_newline(buffer); + return buffer_clamp(buffer, lines, cols); } |
