Recalculate unreadLines on reflow

master
C. McEnroe 2020-02-10 03:37:17 -05:00
parent 7957ca0ecd
commit 2c9ff1717b
1 changed files with 8 additions and 3 deletions

9
ui.c
View File

@ -415,7 +415,7 @@ static void windowScroll(struct Window *window, int n) {
static void windowScrollUnread(struct Window *window) { static void windowScrollUnread(struct Window *window) {
window->scroll = 0; window->scroll = 0;
windowScroll(window, window->unreadLines - PAGE_LINES); windowScroll(window, window->unreadLines - PAGE_LINES + 1);
} }
static int wordWidth(const char *str) { static int wordWidth(const char *str) {
@ -516,15 +516,20 @@ void uiFormat(
static void reflow(struct Window *window) { static void reflow(struct Window *window) {
werase(window->pad); werase(window->pad);
wmove(window->pad, BufferCap - 1, 0); wmove(window->pad, WindowLines - 1, 0);
window->unreadLines = 0;
struct Buffer *buffer = &window->buffer; struct Buffer *buffer = &window->buffer;
for (size_t i = 0; i < BufferCap; ++i) { for (size_t i = 0; i < BufferCap; ++i) {
char *line = buffer->lines[(buffer->len + i) % BufferCap]; char *line = buffer->lines[(buffer->len + i) % BufferCap];
if (!line) continue; if (!line) continue;
waddch(window->pad, '\n'); waddch(window->pad, '\n');
if (i >= (size_t)(BufferCap - window->unreadCount)) {
window->unreadLines += 1 + wordWrap(window->pad, line);
} else {
wordWrap(window->pad, line); wordWrap(window->pad, line);
} }
} }
}
static void resize(void) { static void resize(void) {
mvwin(marker, LINES - 2, 0); mvwin(marker, LINES - 2, 0);