Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: 3.0.6-pre-4: whitespace-ignoring strcmp for history



Here's a minor improvement for 3.0.6-pre-4:

When the histcmp() function is comparing a line that wasn't lexed,
it now ignores whitespace differences (I took my whitespace-ignoring
strcmp() code from my recent history changes and integrated it into
the histcmp() function).

..wayne..

---8<------8<------8<------8<---cut here--->8------>8------>8------>8---
Index: Src/hist.c
--- zsh-3.0.6-pre-4/Src/hist.c	Sat Jun  5 12:41:11 1999
+++ ./Src/hist.c	Sat Jun  5 12:46:31 1999
@@ -592,11 +592,30 @@
     int kword, lword;
     int nwords = chwordpos/2;
 
-    /* If the history entry came from a file, the words were not
-     * divided by the lexer so we have to resort to strcmp.
+    /* If the history entry came from a file, the words were not divided by
+     * the lexer so we have to resort to a whitespace-ignoring compare.
      */
-    if (he->flags & HIST_READ)
-	return strcmp(he->text, chline);
+    if (he->flags & HIST_READ) {
+	char *str1 = he->text, *str2 = chline;
+
+	while (inblank(*str1)) str1++;
+	while (inblank(*str2)) str2++;
+	while (*str1 && *str2) {
+	    if (inblank(*str1)) {
+		if (!inblank(*str2))
+		    break;
+		do str1++; while (inblank(*str1));
+		do str2++; while (inblank(*str2));
+	    }
+	    else {
+		if (*str1 != *str2)
+		    break;
+		str1++;
+		str2++;
+	    }
+	}
+	return *str1 - *str2;
+    }
 
     if (nwords != he->nwords)
 	return 1;
---8<------8<------8<------8<---cut here--->8------>8------>8------>8---



Messages sorted by: Reverse Date, Date, Thread, Author