From d00b3d3b70f326a18b58e6652428e928236e7c65 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 2 Sep 2020 16:29:38 -0400 Subject: [PATCH] Actually insert blank lines in the soft buffer So they can be preserved forever! --- buffer.c | 5 ----- chat.h | 1 - ui.c | 14 ++++++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/buffer.c b/buffer.c index bc4a2b8..fd69cd3 100644 --- a/buffer.c +++ b/buffer.c @@ -184,11 +184,6 @@ int bufferPush( return flow(&buffer->hard, cols, soft); } -int bufferBlank(struct Buffer *buffer) { - struct Line blank = { .heat = Cold, .str = "" }; - return flow(&buffer->hard, 1, &blank); -} - void bufferReflow(struct Buffer *buffer, int cols) { buffer->hard.len = 0; for (size_t i = 0; i < BufferCap; ++i) { diff --git a/chat.h b/chat.h index 72b0246..d05121f 100644 --- a/chat.h +++ b/chat.h @@ -291,7 +291,6 @@ int bufferPush( struct Buffer *buffer, int cols, enum Heat heat, time_t time, const char *str ); -int bufferBlank(struct Buffer *buffer); void bufferReflow(struct Buffer *buffer, int cols); enum Edit { diff --git a/ui.c b/ui.c index df51a3d..93c98bb 100644 --- a/ui.c +++ b/ui.c @@ -546,7 +546,7 @@ void uiWrite(uint id, enum Heat heat, const time_t *src, const char *str) { if (!window->unreadSoft++) window->unreadHard = 0; if (window->mark && heat > Cold) { if (!window->unreadWarm++) { - lines += bufferBlank(window->buffer); + lines += bufferPush(window->buffer, COLS, Cold, 0, ""); } if (heat > window->heat) window->heat = heat; statusUpdate(); @@ -788,6 +788,16 @@ static void showAuto(void) { } } +static void insertBlank(struct Window *window) { + int lines = bufferPush(window->buffer, COLS, Cold, 0, ""); + window->unreadHard += lines; + if (window->scroll) { + windowScroll(window, lines); + } else { + windowUpdate(); + } +} + static void keyCode(int code) { struct Window *window = windows.ptrs[windows.show]; uint id = window->id; @@ -810,7 +820,7 @@ static void keyCode(int code) { break; case KeyMetaD: edit(id, EditDeleteNextWord, 0); break; case KeyMetaF: edit(id, EditNextWord, 0); break; case KeyMetaL: bufferList(window->buffer); - break; case KeyMetaM: bufferBlank(window->buffer); windowUpdate(); + break; case KeyMetaM: insertBlank(window); break; case KeyMetaQ: edit(id, EditCollapse, 0); break; case KeyMetaU: windowScrollUnread(window); break; case KeyMetaV: windowScrollPage(window, +1);