diff options
| author | ache <ache@ache.one> | 2026-08-09 18:17:08 +0200 |
|---|---|---|
| committer | ache <ache@ache.one> | 2026-08-09 18:17:08 +0200 |
| commit | def3f9d519fdfab5e687af1a6b7bccc80735d54a (patch) | |
| tree | ecd022c57e70114bdb8888dd0c14628b2d030795 | |
| parent | Remove not necessary temp variable (diff) | |
Add function to pprint the legende
Doesn't quite works
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | src/print.rs | 61 |
2 files changed, 62 insertions, 0 deletions
@@ -6,4 +6,5 @@ edition = "2024" [dependencies] clap = { version = "4.4", features = ["derive"] } ping = "0.9.0" +term_size = "0.3.2" tokio = { version = "1", features = ["full"] } diff --git a/src/print.rs b/src/print.rs index 2717a1c..63f730f 100644 --- a/src/print.rs +++ b/src/print.rs @@ -2,6 +2,7 @@ use crate::state::State; use crate::stats::Stats; +use term_size; struct SymbolTableElement { fg: &'static str, @@ -146,8 +147,68 @@ const CHARS_TABLE: [SymbolTableElement; 25] = [ }, ]; +const TO_HIDE_LEGENDE_ELEMENTS: [u32; 25] = [ + 0b000_000_000_000_1_000_000_000_000, + 0b000_000_001_000_0_000_100_000_000, + 0b000_000_100_000_1_000_001_000_000, + 0b000_010_000_100_0_001_000_010_000, + 0b000_100_010_000_1_000_010_001_000, // 5 + 0b001_000_100_010_0_010_001_000_100, + 0b010_001_000_100_1_001_000_100_010, + 0b010_010_001_001_0_100_100_010_010, + 0b010_010_010_010_1_010_010_010_010, + 0b001_010_100_101_0_101_001_010_100, // 10 + 0b010_101_010_100_1_001_010_101_010, + 0b010_101_010_101_0_101_010_101_010, + 0b011_010_101_010_1_010_101_010_110, + 0b011_010_101_011_0_110_101_010_110, + 0b011_101_011_010_1_010_110_101_110, // 15 + 0b011_101_101_101_0_101_101_101_110, + 0b011_101_110_110_1_011_011_101_110, + 0b011_110_111_011_0_110_111_011_110, + 0b011_101_111_011_1_110_111_101_110, + 0b011_111_011_111_0_111_110_111_110, // 20 + 0b011_111_110_111_1_111_011_111_110, + 0b011_111_111_111_0_111_111_111_110, + 0b011_111_111_111_1_111_111_111_110, + 0b111_111_111_111_1_111_111_111_110, + 0b111_111_111_111_1_111_111_111_111, // 25 +]; + pub fn print_legende_line() { + let nb_cols: u32 = if let Some((w, _)) = term_size::dimensions() { + w as u32 + } else { + 0 + }; + + let size_elem = 6; + let nb_elements_to_print = CHARS_TABLE.len() as u32; + + if nb_cols == 0 || nb_cols >= nb_elements_to_print * size_elem { + for (index, element) in CHARS_TABLE.iter().enumerate() { + print!( + "{} {}{}{}\x1b[0m ", + 10 * index, element.fg, element.bg, element.character + ); + } + println!("{}", ERASE_LINE_END); + return; + } + println!("Nb_cols: {} / Line_size: {}", nb_cols, CHARS_TABLE.len() as u32 * size_elem); + let nb_elements_to_skip = if (CHARS_TABLE.len() as u32 * size_elem) > nb_cols { + (CHARS_TABLE.len() as u32 * size_elem - nb_cols + size_elem - 1) / size_elem + } else { + 0 + }; + let skip_mod : u32 = nb_elements_to_print / (nb_elements_to_skip as u32 + 1); + println!("Print: {} / Skip: {} / Mod: {}", nb_elements_to_print, nb_elements_to_skip, skip_mod); + println!("Print2: {} / Len: {} / Cols: {}", (nb_elements_to_print - nb_elements_to_skip), (nb_elements_to_print - nb_elements_to_skip) * size_elem, nb_cols); + for (index, element) in CHARS_TABLE.iter().enumerate() { + if (TO_HIDE_LEGENDE_ELEMENTS[nb_elements_to_skip as usize]) & (1 << index) != 0 { + continue; + } print!( "{} {}{}{}\x1b[0m ", 10 * index, element.fg, element.bg, element.character |