summary refs log tree commit diff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-05-28 11:42:00 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-05-28 11:42:00 +0000
commit1d5fbf228d4c40432a1d5dcc27dad0c20d9dbcd7 (patch)
treec8b0924a0f413f9ad7321a336f03ecdd3747572c
parent5fe19241552613eba49534a9749df84dbfeb4575 (diff)
downloadzsh-1d5fbf228d4c40432a1d5dcc27dad0c20d9dbcd7.tar.gz
zsh-1d5fbf228d4c40432a1d5dcc27dad0c20d9dbcd7.tar.xz
zsh-1d5fbf228d4c40432a1d5dcc27dad0c20d9dbcd7.zip
fix for cursor positioning with that -y option of compctl (display strings) (14507)
-rw-r--r--ChangeLog3
-rw-r--r--Src/Zle/compresult.c35
2 files changed, 25 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 961516478..6743bcd98 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2001-05-28  Sven Wischnowsky  <wischnow@zsh.org>
 
+	* 14507: Src/Zle/compresult.c: fix for cursor positioning with
+	that -y option of compctl (display strings)
+
 	* 14504: Src/Modules/zprof.c: make the zprof wrapper function
 	be more careful, avoiding almost all of the code when the
 	module is being unloaded
diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c
index 74bc577e7..c1da0fbff 100644
--- a/Src/Zle/compresult.c
+++ b/Src/Zle/compresult.c
@@ -1398,9 +1398,12 @@ calclist(int showall)
 	if (!onlyexpl && pp) {
 	    /* We have an ylist, lets see, if it contains newlines. */
 	    hidden = 1;
-	    while (!nl && *pp)
-		nl = !!strchr(*pp++, '\n');
-
+	    while (!nl && *pp) {
+                if (ztrlen(*pp) >= columns)
+                    nl = 1;
+                else
+                    nl = !!strchr(*pp++, '\n');
+            }
 	    pp = g->ylist;
 	    if (nl || !pp[1]) {
 		/* Yup, there are newlines, count lines. */
@@ -1411,17 +1414,17 @@ calclist(int showall)
 		while ((sptr = *pp)) {
 		    while (sptr && *sptr) {
 			nlines += (nlptr = strchr(sptr, '\n'))
-			    ? 1 + (nlptr-sptr) / columns
-			    : strlen(sptr) / columns;
+			    ? 1 + (nlptr - sptr - 1) / columns
+			    : (ztrlen(sptr) - 1) / columns;
 			sptr = nlptr ? nlptr+1 : NULL;
 		    }
 		    nlines++;
 		    pp++;
 		}
-		nlines--;
+		/*** nlines--; */
 	    } else {
 		while (*pp) {
-		    l = strlen(*pp);
+		    l = ztrlen(*pp);
 		    ndisp++;
 		    if (l > glong)
 			glong = l;
@@ -1524,7 +1527,7 @@ calclist(int showall)
 			g->width = 1;
 			
 			while (*pp)
-			    glines += 1 + (strlen(*pp++) / columns);
+			    glines += 1 + (ztrlen(*pp++) / columns);
 		    }
 		}
 	    } else {
@@ -1566,7 +1569,7 @@ calclist(int showall)
 		    VARARR(int, ylens, yl);
 
 		    for (i = 0; *pp; i++, pp++)
-			ylens[i] = strlen(*pp) + add;
+			ylens[i] = ztrlen(*pp) + add;
 
 		    if (g->flags & CGF_ROWS) {
 			int count, tcol, first, maxlines = 0, llines;
@@ -1913,10 +1916,16 @@ printlist(int over, CLPrintFunc printm, int showall)
 		}
 	    }
 	    if (g->flags & CGF_LINES) {
-		while (*pp) {
-		    zputs(*pp, shout);
-		    if (*++pp)
-			putc('\n', shout);
+                char *p;
+
+		while ((p = *pp++)) {
+		    zputs(p, shout);
+		    if (*pp) {
+                        if (ztrlen(p) % columns)
+                            putc('\n', shout);
+                        else
+                            fputs(" \010", shout);
+                    }
 		}
 	    } else {
 		int n = g->lcount, nl, nc, i, a;