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 <[email protected]>
---
 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


Reply via email to