From 99bd8154adb07352e5bdd9821f612c07d97b8522 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 14 Aug 2007 11:51:19 +0200 Subject: more: fix underlining for multibyte chars Try: $ printf "aaa _\bŽ_\bŽ_\bŽ bbb\n" | more aaa ŽŽŽ bbb (ŽŽŽ has to be three underlined chars on terminal). Signed-off-by: Karel Zak --- text-utils/more.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'text-utils/more.c') diff --git a/text-utils/more.c b/text-utils/more.c index db2fa4d20..19c441789 100644 --- a/text-utils/more.c +++ b/text-utils/more.c @@ -1052,7 +1052,23 @@ void prbuf (register char *s, register int n) my_putstring(state ? ULenter : ULexit); } if (c != ' ' || pstate == 0 || state != 0 || ulglitch == 0) +#ifdef ENABLE_WIDECHAR + { + wchar_t wc; + size_t mblength; + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); + s--; n++; + mblength = mbrtowc (&wc, s, n, &state); + if (mblength == (size_t) -2 || mblength == (size_t) -1) + mblength = 1; + while (mblength--) + putchar (*s++); + n += mblength; + } +#else putchar(c); +#endif /* ENABLE_WIDECHAR */ if (state && *chUL) { putsout(chBS); my_putstring(chUL); -- cgit v1.2.3-55-g7522