diff options
-rw-r--r-- | src/pacman/downloadprog.c | 3 | ||||
-rw-r--r-- | src/pacman/list.c | 4 | ||||
-rw-r--r-- | src/pacman/trans.c | 3 | ||||
-rw-r--r-- | src/pacman/util.c | 22 |
4 files changed, 25 insertions, 7 deletions
diff --git a/src/pacman/downloadprog.c b/src/pacman/downloadprog.c index f831656b..06345782 100644 --- a/src/pacman/downloadprog.c +++ b/src/pacman/downloadprog.c @@ -47,8 +47,6 @@ struct timeval initial_time; /* pacman options */ extern config_t *config; -extern unsigned int maxcols; - #define FILENAME_TRIM_LEN 21 #define UPDATE_SPEED_SEC 0.1 @@ -58,6 +56,7 @@ void log_progress(const char *filename, int xfered, int total) int i, hash; long chomp = 0; char *fname, *p; + unsigned int maxcols = getcols(); unsigned int progresslen = maxcols - 57; int percent = ((float)xfered) / ((float)total) * 100; struct timeval current_time; diff --git a/src/pacman/list.c b/src/pacman/list.c index 0c271978..c95e8f3d 100644 --- a/src/pacman/list.c +++ b/src/pacman/list.c @@ -28,8 +28,6 @@ #include "util.h" #include "list.h" -extern int maxcols; - static list_t *list_last(list_t *list); list_t *list_new() @@ -127,6 +125,7 @@ void list_display(const char *title, list_t *list) if(list) { for(lp = list, cols = len; lp; lp = lp->next) { int s = strlen((char *)lp->data)+1; + unsigned int maxcols = getcols(); if(s+cols >= maxcols) { int i; cols = len; @@ -155,6 +154,7 @@ void pmlist_display(const char *title, pmlist_t *list) if(list) { for(lp = list, cols = len; lp; lp = alpm_list_next(lp)) { int s = strlen(alpm_list_getdata(lp))+1; + unsigned int maxcols = getcols(); if(s+cols >= maxcols) { int i; cols = len; diff --git a/src/pacman/trans.c b/src/pacman/trans.c index 0b141906..1b9295e1 100644 --- a/src/pacman/trans.c +++ b/src/pacman/trans.c @@ -40,7 +40,6 @@ #define LOG_STR_LEN 256 extern config_t *config; -extern unsigned int maxcols; int prevpercent=0; /* for less progressbar output */ @@ -154,6 +153,7 @@ void cb_trans_evt(unsigned char event, void *data1, void *data2) break; case PM_TRANS_EVT_RETRIEVE_LOCAL: MSG(NL, " %s [", (char*)data1); + unsigned int maxcols = getcols(); STRNCPY(out, (char*)data2, maxcols-42); MSG(CL, "%s", out); for(i = strlen(out); i < maxcols-43; i++) { @@ -287,6 +287,7 @@ void cb_trans_progress(unsigned char event, char *pkgname, int percent, int howm static int lasthash = 0, mouth = 0; int i, hash; long chomp = 0; + unsigned int maxcols = getcols(); unsigned int maxpkglen, progresslen = maxcols - 57; char *ptr = NULL; diff --git a/src/pacman/util.c b/src/pacman/util.c index 68f39e38..c6841e16 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -24,6 +24,9 @@ #include <sys/stat.h> #endif +#include <sys/types.h> +#include <sys/ioctl.h> + #include "config.h" #include <stdio.h> #include <stdlib.h> @@ -45,18 +48,33 @@ #include "conf.h" #include "log.h" -extern int maxcols; extern config_t *config; extern int neednl; /* gets the current screen column width */ int getcols() { +#ifdef TIOCGSIZE + struct ttysize win; + if(ioctl(1, TIOCGSIZE, &win) == 0) { + return win.ts_cols; + } +#elif defined(TIOCGWINSZ) + struct winsize win; + if(ioctl(1, TIOCGWINSZ, &win) == 0) { + return win.ws_col; + } +#endif + else { + return -1; + } + /* Original envvar way - prone to display issues const char *cenv = getenv("COLUMNS"); if(cenv != NULL) { return atoi(cenv); } return -1; + */ } /* does the same thing as 'mkdir -p' */ @@ -152,7 +170,7 @@ void indentprint(const char *str, int indent) next = p + strlen(p); } len = next - p; - if(len > (maxcols-cidx-1)) { + if(len > (getcols()-cidx-1)) { /* newline */ int i; fprintf(stdout, "\n"); |