[pacman-dev] [PATCH 2/2] callback: use variable length for progressbar text

Xavier Chantry shiningxc at gmail.com
Tue Dec 15 20:43:08 EST 2009


This fixes FS#17523

We always used a fixed value of 50 for textlen, which is often not enough
for download progress bar. At least we can use a bigger width on large
terminal (e.g. 60% of width) and keep 50 as minimum.

before:
 nautilus-2.28.4-1-x...     5.7M  789.2K/s 00:00:07 [####################################] 100%
after:
 nautilus-2.28.4-1-x86_64         5.7M  770.7K/s 00:00:08 [##############################] 100%

Signed-off-by: Xavier Chantry <shiningxc at gmail.com>
---
 src/pacman/callback.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index a40a702..b021d9d 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -320,7 +320,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
 	float timediff;
 
 	/* size of line to allocate for text printing (e.g. not progressbar) */
-	const int infolen = 50;
+	int infolen;
 	int tmp, digits, textlen;
 	char *opr = NULL;
 	/* used for wide character width determination and printing */
@@ -331,6 +331,11 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
 		return;
 	}
 
+	infolen = getcols() * 6 / 10;
+	if (infolen < 50) {
+		infolen = 50;
+	}
+
 	if(percent == 0) {
 		timediff = get_update_timediff(1);
 	} else {
@@ -451,9 +456,8 @@ void cb_dl_total(off_t total)
 /* callback to handle display of download progress */
 void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
 {
-	const int infolen = 50;
-	/* explanation of magic 28 number at the end */
-	const int filenamelen = infolen - 28;
+	int infolen;
+	int filenamelen;
 	char *fname, *p;
 	/* used for wide character width determination and printing */
 	int len, wclen, wcwid, padwid;
@@ -474,6 +478,13 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
 		return;
 	}
 
+	infolen = getcols() * 6 / 10;
+	if (infolen < 50) {
+		infolen = 50;
+	}
+	/* explanation of magic 28 number at the end */
+	filenamelen = infolen - 28;
+
 	/* only use TotalDownload if enabled and we have a callback value */
 	if(config->totaldownload && list_total) {
 		/* sanity check */
-- 
1.6.5.6



More information about the pacman-dev mailing list