Alexander E. Patrakov пишет:
UTF-8 is _still_ not fully supported (e.g. 'tr :upper: :lower:' works
only on ASCII characters, 'watch' shows only ASCII characters, 'sfdisk'
misaligns button labels in non-English UTF-8 locales), but the same bugs
exist in all distros (including those which claim that they support only
UTF-8). Because of that, such bugs should not be an obstacle.
Hello, this patch fix UTF-8 issue with `watch` at least in ru_RU.UTF-8
and be_BY.UTF-8.
--- procps-3.2.6/watch.c 2005-10-30 02:44:53.000000000 +0300
+++ procps-3.2.6.UTF-8/watch.c 2006-01-01 11:54:35.000000000 +0200
@@ -25,6 +25,7 @@
#include <termios.h>
#include <locale.h>
#include "proc/procps.h"
+#include <wctype.h>
#ifdef FORCE_8BIT
#undef isprint
@@ -274,9 +275,16 @@
/* if there is a tab pending, just spit
spaces until the
next stop instead of reading
characters */
if (!tabpending)
- do
+ do {
c = getc(p);
- while (c != EOF && !isprint(c)
+ if (c > 127) {
+ c = ((c ^ 192)
<< 6) + (getc(p) ^ 128);
+ } else if (c > 223) {
+ c = ((c ^ 224)
<< 12) + ((getc(p) ^ 128) << 6) + (getc(p) ^ 128);
+ } else if (c > 239) {
+ c = ((c ^ 240)
<< 18) + ((getc(p) ^ 128) << 12) + ((getc(p) ^ 128) << 6) + (getc(p) ^ 128);
+ }
+ } while (c != EOF &&
!iswprint(c)
&& c != '\n'
&& c != '\t');
if (c == '\n')
@@ -304,7 +312,10 @@
}
if (attr)
standout();
- addch(c);
+ wchar_t wc = c;
+ cchar_t cc = {0, {}};
+ setcchar(&cc, &wc, 0, 0, NULL);
+ add_wch(&cc);
if (attr)
standend();
}
--
http://linuxfromscratch.org/mailman/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page