diff --git a/CHANGELOG.md b/CHANGELOG.md index 3456c79..22e2439 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ + +## Version 0.2.0 - 2025-12-13 + +The rtop tool now includes updated C source code. This improves the tool's functionality and performance. + +**Changes:** 2 files, 97 lines +**Languages:** C (97 lines) + ## Version 0.1.0 - 2025-12-13 The application now includes a CPU tab with core usage and temperature details. Users can view memory, process, network, disk, and filesystem statistics, along with improved memory detail views. diff --git a/rtop b/rtop index ec9dfe4..bd8b4cc 100755 Binary files a/rtop and b/rtop differ diff --git a/src/main.c b/src/main.c index 56525fa..223d093 100644 --- a/src/main.c +++ b/src/main.c @@ -48,6 +48,7 @@ static void print_help(const char *program) { printf("\nNavigation:\n"); printf(" Left/Right arrows Switch tabs\n"); printf(" 1-5 Jump to tab\n"); + printf(" ESC Pause (for copy/paste)\n"); printf(" q Quit\n"); } @@ -76,6 +77,7 @@ int main(int argc, char *argv[]) { double rotate_interval = 0.0; int sort_by_mem = 0; int current_tab = TAB_CPU; + int paused = 0; static struct option long_options[] = { {"delay", required_argument, 0, 'd'}, @@ -148,56 +150,58 @@ int main(int argc, char *argv[]) { double rotate_elapsed = 0.0; while (running) { - system_info_update(&sys); - cpu_info_update(&cpu, refresh_interval); - memory_info_update(&mem, refresh_interval); - process_list_update(&procs, mem.total, refresh_interval, cpu.num_cores); - network_info_update(&net, refresh_interval); - disk_info_update(&disk, refresh_interval); - filesystem_info_update(&fs); + if (!paused) { + system_info_update(&sys); + cpu_info_update(&cpu, refresh_interval); + memory_info_update(&mem, refresh_interval); + process_list_update(&procs, mem.total, refresh_interval, cpu.num_cores); + network_info_update(&net, refresh_interval); + disk_info_update(&disk, refresh_interval); + filesystem_info_update(&fs); - if (sort_by_mem) { - process_list_sort_by_mem(&procs); - } else { - process_list_sort_by_cpu(&procs); - } - - if (rotate_interval > 0) { - rotate_elapsed += refresh_interval; - if (rotate_elapsed >= rotate_interval) { - current_tab = (current_tab + 1) % TAB_COUNT; - rotate_elapsed = 0.0; + if (sort_by_mem) { + process_list_sort_by_mem(&procs); + } else { + process_list_sort_by_cpu(&procs); } + + if (rotate_interval > 0) { + rotate_elapsed += refresh_interval; + if (rotate_elapsed >= rotate_interval) { + current_tab = (current_tab + 1) % TAB_COUNT; + rotate_elapsed = 0.0; + } + } + + terminal_get_size(&term); + terminal_buffer_clear(&term); + terminal_buffer_append(&term, "\033[2J\033[H"); + + display_header(&term, &sys); + display_tabs(&term, current_tab); + + switch (current_tab) { + case TAB_CPU: + display_cpu_detail(&term, &cpu); + break; + case TAB_MEMORY: + display_memory_detail(&term, &mem, &procs); + break; + case TAB_NETWORK: + display_network_detail(&term, &net); + break; + case TAB_DISK: + display_disk_detail(&term, &disk, &fs); + break; + case TAB_PROCESS: + display_process_detail(&term, &procs); + break; + } + + display_footer(&term, refresh_interval); + terminal_buffer_flush(&term); } - terminal_get_size(&term); - terminal_buffer_clear(&term); - terminal_buffer_append(&term, "\033[2J\033[H"); - - display_header(&term, &sys); - display_tabs(&term, current_tab); - - switch (current_tab) { - case TAB_CPU: - display_cpu_detail(&term, &cpu); - break; - case TAB_MEMORY: - display_memory_detail(&term, &mem, &procs); - break; - case TAB_NETWORK: - display_network_detail(&term, &net); - break; - case TAB_DISK: - display_disk_detail(&term, &disk, &fs); - break; - case TAB_PROCESS: - display_process_detail(&term, &procs); - break; - } - - display_footer(&term, refresh_interval); - terminal_buffer_flush(&term); - fd_set fds; FD_ZERO(&fds); FD_SET(STDIN_FILENO, &fds); @@ -210,15 +214,20 @@ int main(int argc, char *argv[]) { int key = read_key(); if (key == 'q' || key == 'Q') { running = 0; + } else if (key == 27) { + paused = 1; } else if (key == 1003) { current_tab = (current_tab + 1) % TAB_COUNT; rotate_elapsed = 0.0; + paused = 0; } else if (key == 1004) { current_tab = (current_tab - 1 + TAB_COUNT) % TAB_COUNT; rotate_elapsed = 0.0; + paused = 0; } else if (key >= '1' && key <= '5') { current_tab = key - '1'; rotate_elapsed = 0.0; + paused = 0; } } }