jscanner

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit fa7fd9f91375dfd2e9d3e7fb0eee99181e7ea475
parent 8094a2ec94cdce0ac7ddf2f9e24db08815b5412d
Author: Matthias Jaros <jaros@mailbox.org>
Date:   Mon,  6 Apr 2026 20:07:54 +0200

Make bar adjust to terminal width

Diffstat:
Msrc/main/java/com/it_jaros/network_scanner/ProgressBar.java | 33++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/it_jaros/network_scanner/ProgressBar.java b/src/main/java/com/it_jaros/network_scanner/ProgressBar.java @@ -1,5 +1,7 @@ package com.it_jaros.network_scanner; +import java.io.BufferedReader; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; @@ -13,9 +15,26 @@ public class ProgressBar { private final ScheduledExecutorService ui = Executors.newSingleThreadScheduledExecutor(); private final ReentrantLock lock = new ReentrantLock(); + private final int columnWidth = ProgressBar.getColumnWidth(); private List<Progress> hosts; + private static int getColumnWidth() { + try { + Process process = new ProcessBuilder("sh", "-c", "stty size < /dev/tty | cut -d' ' -f2").start(); + + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream()))) { + String line = reader.readLine(); + if (line != null && !line.isBlank()) { + return Integer.parseInt(line.trim()); + } + } + } catch (Exception ignored) {} + + return 80; + } + public void start() { this.hosts = new ArrayList<>(); System.out.print("Scanning targets...\n\n"); @@ -65,14 +84,18 @@ public class ProgressBar { } public String createBar(String label, int open, int filtered, int done, int total) { - int width = 30; + int terminalWidth = columnWidth; + int bracketWidth = terminalWidth / 3; double pct = total == 0 ? 1.0 : (done / (double) total); - int filled = (int) (pct * width); - - String brackets = "[" + "#".repeat(filled) + "-".repeat(width - filled) + "]"; int percent = (int) (pct * 100); - return String.format("%-40s open: %s filtered: %s %s %3d%% (%d/%d)", label, open, filtered, brackets, percent, done, total); + String statsLeft = String.format("open:%d filtered:%d (%d/%d)", open, filtered, done, total); + String statsRight = String.format("%3d%%", percent); + int filled = (int) (pct * bracketWidth); + String brackets = "[" + "#".repeat(filled) + "-".repeat(bracketWidth - filled) + "]"; + + int spacesBetween = terminalWidth - bracketWidth - (label + statsLeft + statsRight).length() - 5; + return String.format("%s:%s%s %s %s", label, " ".repeat(spacesBetween),statsLeft, brackets, statsRight); } public void stop() {