libedit: Add bapt patches to improve unicode
authorJohn Marino <draco@marino.st>
Sun, 1 Mar 2015 15:14:24 +0000 (16:14 +0100)
committerJohn Marino <draco@marino.st>
Sun, 1 Mar 2015 16:25:14 +0000 (17:25 +0100)
On Jan 9, bapt synced FreeBSD-current with the latest libedit from NetBSD.
After that, he added local patches to fix line reading in a unicode
environment.  Specifically it allowed sh(1) to work in UTF-8 environment.
I appreciate that bapt took the time to identify those patches for the
benefit of DragonFly.  Thanks!

contrib/libedit/README.DRAGONFLY
contrib/libedit/src/el.c
contrib/libedit/src/eln.c

index 6e2cff7..6a03187 100644 (file)
@@ -14,5 +14,6 @@ A list of files and directories removed is in README.DELETED
 Local modifications applied to following files:
        src/chartype.h
        src/el.c
+       src/eln.c
        src/filecomplete.c
        src/sys.h
index 9342861..64c4240 100644 (file)
@@ -117,7 +117,7 @@ el_init_fd(const char *prog, FILE *fin, FILE *fout, FILE *ferr,
          */
        el->el_flags = 0;
 #ifdef WIDECHAR
-       if (setlocale(LC_CTYPE, NULL) != NULL){
+       if (setlocale(LC_CTYPE, "") != NULL){
                if (strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
                        el->el_flags |= CHARSET_IS_UTF8;
        }
index 5bcfb4f..a5c9fa7 100644 (file)
@@ -75,10 +75,18 @@ public const char *
 el_gets(EditLine *el, int *nread)
 {
        const wchar_t *tmp;
+       int nwread;
+
+       *nread = 0;
+
+       if (!(el->el_flags & CHARSET_IS_UTF8))
+               el->el_flags |= IGNORE_EXTCHARS;
+       tmp = el_wgets(el, &nwread);
+       if (!(el->el_flags & CHARSET_IS_UTF8))
+               el->el_flags &= ~IGNORE_EXTCHARS;
+       for (int i = 0; i < nwread; i++)
+               *nread += ct_enc_width(tmp[i]);
 
-       el->el_flags |= IGNORE_EXTCHARS;
-       tmp = el_wgets(el, nread);
-       el->el_flags &= ~IGNORE_EXTCHARS;
        return ct_encode_string(tmp, &el->el_lgcyconv);
 }