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"); | 
