A couple of somewhat recent changes in NetBSD's libedit permit
el_gets(3) to accept multibyte characters if the locale supports
it.

A notable user of this function is sftp(1) which will allow users to
input multibyte characters, in filenames for example, once the diff
is applied.

--
Christian


Index: eln.c
===================================================================
RCS file: /cvs/src/lib/libedit/eln.c,v
retrieving revision 1.4
diff -u -p -r1.4 eln.c
--- eln.c       20 May 2014 11:59:03 -0000      1.4
+++ eln.c       24 Dec 2015 19:34:09 -0000
@@ -74,9 +74,18 @@ el_gets(EditLine *el, int *nread)
 {
        const wchar_t *tmp;
 
-       el->el_flags |= IGNORE_EXTCHARS;
+       if (!(el->el_flags & CHARSET_IS_UTF8))
+               el->el_flags |= IGNORE_EXTCHARS;
        tmp = el_wgets(el, nread);
-       el->el_flags &= ~IGNORE_EXTCHARS;
+       if (tmp != NULL) {
+               size_t nwread = 0;
+               int i;
+               for (i = 0; i < *nread; i++)
+                       nwread += ct_enc_width(tmp[i]);
+               *nread = (int)nwread;
+       }
+       if (!(el->el_flags & CHARSET_IS_UTF8))
+               el->el_flags &= ~IGNORE_EXTCHARS;
        return ct_encode_string(tmp, &el->el_lgcyconv);
 }
 

Reply via email to