--- lbbs/src/screen.c 2025/05/13 07:28:51 1.47 +++ lbbs/src/screen.c 2025/05/15 09:16:47 1.50 @@ -114,8 +114,10 @@ static int _str_input(char *buffer, int igetch_reset(); - while (!SYS_server_exit && (c = igetch_t(MIN(MAX_DELAY_TIME, 60)))) + while (!SYS_server_exit) { + c = igetch_t(MIN(MAX_DELAY_TIME, 60)); + if (c == CR) { igetch_reset(); @@ -158,7 +160,7 @@ static int _str_input(char *buffer, int { if (!hz && offset + 2 > buf_size - 1) // No enough space for Chinese character { - igetch_reset(); + igetch(0); // Ignore 1 character outc('\a'); iflush(); continue; @@ -322,6 +324,18 @@ int display_file_ex(const char *filename case KEY_NULL: case KEY_TIMEOUT: goto cleanup; + case KEY_HOME: + c_line_current = 0; + line = begin_line; + max_lines = screen_rows - 1; + clrline(begin_line, screen_rows); + break; + case KEY_END: + c_line_current = c_line_total - (screen_rows - 2); + line = begin_line; + max_lines = screen_rows - 1; + clrline(begin_line, screen_rows); + break; case KEY_UP: if (c_line_current - line < 0) // Reach top { @@ -333,8 +347,9 @@ int display_file_ex(const char *filename // prints("\033[T"); // Scroll down 1 line max_lines = screen_rows - 1; // Legacy Fterm only works with this line break; - case KEY_DOWN: case CR: + igetch_reset(); + case KEY_DOWN: if (c_line_current + ((screen_rows - 2) - (line - 1)) >= c_line_total) // Reach bottom { break; @@ -403,6 +418,7 @@ int display_file_ex(const char *filename clrline(begin_line, screen_rows); break; default: + log_std("Input: %d\n", ch); input_ok = 0; break; }