From 4f76beef4452743dafc90beb054a0b5807d8e3fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Mon, 11 Mar 2024 14:03:02 +0100 Subject: [PATCH] Fix "minor" issues Fix off by one error caused by using the whole terminal height instead of the height used by the table (without the header). Add missing initialization. Fix terminal position indexing as it is 1 based (not 0 based). Handle newline after printing entry separately in the loop mode as when the entry at the very bottom of the terminal emits newline the whole output shifts (erasing header). --- src/loop.c | 18 ++++++++++++------ src/main.c | 13 ++++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/loop.c b/src/loop.c index 0cbd3bf..aa30e73 100644 --- a/src/loop.c +++ b/src/loop.c @@ -19,6 +19,8 @@ void init_term(t_term *term) new.c_cc[VTIME] = 10; tcsetattr(STDIN_FILENO, TCSANOW, &new); ft_putstr_fd(term_setup, STDOUT_FILENO); + term->top_row = 0; + term->y = 1; return ; } @@ -53,7 +55,8 @@ void get_terminal_size(t_term *term) ft_putstr_fd(term_size_str, STDOUT_FILENO); if (read(STDIN_FILENO, buffer, TERMSIZE_BUFFER_SIZE) < 0) - term->height = ft_atoi(&buffer[2]); + return ; + term->height = ft_atoi(&buffer[2]) - 1; i = 0; while (buffer[i] != ';') ++i; @@ -65,7 +68,7 @@ void get_terminal_size(t_term *term) static const char *print_init_str = "" "\033[s" - "\033[1;0H" + "\033[2;1H" ; void print_noncanon(t_vec *database, t_term *term) @@ -76,7 +79,10 @@ void print_noncanon(t_vec *database, t_term *term) ft_putstr_fd(print_init_str, STDOUT_FILENO); while (i < database->size && i - term->top_row < term->height) { - print_entry(ft_vec_access(database, i++)); + print_entry(ft_vec_access(database, i)); + if (i - term->top_row < term->height - 1) + ft_putchar_fd('\n', STDOUT_FILENO); + ++i; } ft_putstr_fd(restore_cursor, STDOUT_FILENO); return ; @@ -96,7 +102,7 @@ int handle_buffer(const char *buffer, t_vec *database, t_term *term) } else if (!ft_strcmp(buffer, "\033[B")) { - if (term->y < term->height) + if (term->y < term->height && term->y < database->size - term->top_row) { ++term->y; ft_putstr_fd(buffer, STDOUT_FILENO); @@ -104,8 +110,8 @@ int handle_buffer(const char *buffer, t_vec *database, t_term *term) else if (database->size - term->top_row > term->height) ++term->top_row; } - else if (!ft_strcmp(buffer, "k") && term->top_row + term->y < database->size) - kill_entry(database, term->top_row + term->y); + else if (!ft_strcmp(buffer, "k") && term->top_row + term->y - 1 < database->size) + kill_entry(database, term->top_row + term->y - 1); else if (!ft_strcmp(buffer, "q") || !ft_strcmp(buffer, "\033")) return (1); return (0); diff --git a/src/main.c b/src/main.c index 84b0ed6..07cbdd0 100644 --- a/src/main.c +++ b/src/main.c @@ -64,7 +64,7 @@ void print_entry(t_entry *entry) countdown = 3600 - (get_time_sec() - entry->kill_time); countdown = ft_max(0, countdown); - ft_printf(" %-20s%5i %-20s%2i:%02i\n", + ft_printf(" %-20s%5i %-20s%2i:%02i", entry->name, entry->level, entry->biome, @@ -73,13 +73,20 @@ void print_entry(t_entry *entry) return ; } +void print_entry_nl(t_entry *entry) +{ + print_entry(entry); + ft_putchar_fd('\n', STDOUT_FILENO); + return ; +} + void print_database(t_vec *database) { size_t i; i = 0; while (i < database->size) - print_entry(ft_vec_access(database, i++)); + print_entry_nl(ft_vec_access(database, i++)); return ; } @@ -283,7 +290,7 @@ void carry_out_command(t_command *com, t_vec *database) if (com->entry.name == NULL) print_database(database); else - print_entry(ft_vec_access(database, ind)); + print_entry_nl(ft_vec_access(database, ind)); } else if (com->basic == basic_help) print_help(); -- 2.30.2