diff --git a/build.gradle b/build.gradle index 729d92f..16a21e1 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: "groovy" apply plugin: "maven" group = "com.jdbernard" -version = "1.1" +version = "1.2" repositories { mavenLocal() diff --git a/console_progress.nimble b/console_progress.nimble index e48ebb9..9c11670 100644 --- a/console_progress.nimble +++ b/console_progress.nimble @@ -1,6 +1,6 @@ # Package -version = "1.1" +version = "1.2" author = "Jonathan Bernard" description = "Utility for writing dynamic progress bars to the console." license = "BSD" diff --git a/src/main/groovy/com/jdbernard/util/ConsoleProgressBar.groovy b/src/main/groovy/com/jdbernard/util/ConsoleProgressBar.groovy index a29770d..f5f9182 100644 --- a/src/main/groovy/com/jdbernard/util/ConsoleProgressBar.groovy +++ b/src/main/groovy/com/jdbernard/util/ConsoleProgressBar.groovy @@ -9,12 +9,12 @@ package com.jdbernard.util * @author Jonathan Bernard (jdbernard@gmail.com) */ public class ConsoleProgressBar { - int MAX_STEP = 30 + int WIDTH = 79 + int MAX_STEP = 35 long max = 10 def out = System.out private int lastStepAmount = -1 - private String lastLinePrinted = "" private String lastInfo = "" private long startTime @@ -50,20 +50,17 @@ public class ConsoleProgressBar { if (info.length() > 16) info = info[0..<16] if (info.length() < 16) info = info.padRight(16) - out.print '\b' * lastLinePrinted.length() - lastLinePrinted = '=' * numEq + (curStep > 0 ? "0" : "") + '-' * (MAX_STEP - curStep) - lastLinePrinted += " ${info} -- (" + + out.print '\b' * WIDTH + def line = = '=' * numEq + (curStep > 0 ? "0" : "") + '-' * (MAX_STEP - curStep) + line += " ${info} -- (" + "${String.format('%5.2f', curPercent * 100)}%, ${remMin ? remMin + 'm ' : ''}${remSec}s) " - out.print lastLinePrinted + out.print line.padRight(WIDTH) lastStepAmount = curStep; } out.flush() } public void erase() { - out.print '\b' * lastLinePrinted.length() - out.print ' ' * lastLinePrinted.length() - out.print '\b' * lastLinePrinted.length() - lastLinePrinted = "" + out.print ('\b' * WIDTH) + (' ' * WIDTH) + ('\b' * WIDTH) } } diff --git a/src/main/nim/console_progress.nim b/src/main/nim/console_progress.nim index dd2b903..0d6f197 100644 --- a/src/main/nim/console_progress.nim +++ b/src/main/nim/console_progress.nim @@ -2,9 +2,9 @@ import strutils, times, math type Progress* = ref object of RootObj sout: File - lastStep, maxSteps: int + lastStep, width, maxSteps: int startTime: float - lastLinePrinted, lastInfo: string + lastInfo: string maxValue: BiggestInt proc getMax*(pd: Progress): BiggestInt = @@ -17,9 +17,9 @@ proc newProgress*(sout: File, maxValue: BiggestInt): Progress = return Progress(sout: sout, startTime: cpuTime(), lastStep: 0, - lastLinePrinted: "", maxValue: maxValue, - maxSteps: 30) + width: 79, + maxSteps: 35) proc updateProgress*(pd: Progress, newValue: BiggestInt, info: string): void = @@ -40,29 +40,29 @@ proc updateProgress*(pd: Progress, newValue: BiggestInt, info: string): void = if displayedInfo.len < 16: displayedInfo = displayedInfo & ' '.repeat(16 - displayedInfo.len) - pd.sout.write('\b'.repeat(pd.lastLinePrinted.len)) + pd.sout.write('\b'.repeat(pd.width)) - pd.lastLinePrinted = + var line = '='.repeat(displayedSteps) & (if curStep > 0: "0" else: "") & '-'.repeat(pd.maxSteps - curStep) & " " & displayedInfo & " -- (" & (curPercent * 100).formatFloat(ffDecimal, 2) & "%" if curPercent > 0.05: - pd.lastLinePrinted &= ", " + line &= ", " if remTime > 60: - pd.lastLinePrinted &= $floor(remTime / 60).int & "m " - pd.lastLinePrinted &= $ceil(remTime mod 60) & "s" + line &= $floor(remTime / 60).int & "m " + line &= $ceil(remTime mod 60) & "s" - pd.lastLinePrinted &= ")" + line &= ")" + line &= spaces(max(pd.width - line.len, 0)) - pd.sout.write(pd.lastLinePrinted) + pd.sout.write(line) pd.lastStep = curStep pd.sout.flushFile proc erase*(pd: Progress): void = - pd.sout.write('\b'.repeat(pd.lastLinePrinted.len)) - pd.sout.write(' '.repeat(pd.lastLinePrinted.len)) - pd.sout.write('\b'.repeat(pd.lastLinePrinted.len)) - pd.lastLinePrinted = "" + pd.sout.write('\b'.repeat(pd.width)) + pd.sout.write(' '.repeat(pd.width)) + pd.sout.write('\b'.repeat(pd.width))