1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-23 04:23:08 +00:00
freebsd-ports/x11/rxvt-unicode/files/extra-patch-imlocale
Thierry Thomas 7a9fe0970f rxvt-unicode assume wchar_t is Unicode, but it's not true for FreeBSD.
Add a patch which converts the IM input charater to Unicode.

It requires additional patch dependancy and enlarge executable size,
so a knob WITHOUT_IMLOCALE_FIX is provided to disable this feature.

PR:		ports/98166
Submitted by:	Kuang-che Wu <kcwu (at) csie.org>
2006-06-04 19:29:23 +00:00

75 lines
2.1 KiB
Plaintext

diff -ur src/command.C.orig src/command.C
--- src/command.C.orig Mon Feb 20 22:41:16 2006
+++ src/command.C Sun May 21 09:36:40 2006
@@ -301,6 +301,26 @@
}
#endif
+void from_imlocale_to_locale(const char *imlocale, const char *locale, wchar_t *wkbuf, int len)
+{
+ if(!imlocale || !locale)
+ return;
+
+ if(!strchr(imlocale,'.') || !strchr(locale,'.'))
+ return;
+
+ codeset imcs = codeset_from_name(strchr(imlocale, '.'));
+ codeset cs = codeset_from_name(strchr(locale, '.'));
+
+ if (imcs == CS_UNKNOWN || cs == CS_UNKNOWN)
+ return;
+
+ for(int i=0; i<len; i++) {
+ wchar_t unicode = TO_UNICODE(imcs, wkbuf[i]);
+ wkbuf[i] = FROM_UNICODE(cs, unicode);
+ }
+}
+
void
rxvt_term::key_press (XKeyEvent &ev)
{
@@ -361,6 +381,9 @@
if (rs[Rs_imLocale])
SET_LOCALE (locale);
+ if (rs[Rs_imLocale])
+ from_imlocale_to_locale(rs[Rs_imLocale], locale, wkbuf, len);
+
if (status_return == XLookupChars
|| status_return == XLookupBoth)
{
diff -ur src/encoding.C.orig src/encoding.C
--- src/encoding.C.orig Mon Feb 20 22:41:16 2006
+++ src/encoding.C Sun May 21 09:36:40 2006
@@ -151,6 +151,7 @@
static uint32_t cs_us_ascii_from_unicode (unicode_t unicode) { return unicode <= 127 ? unicode : NOCHAR; }
#define cs_us_ascii_to_unicode_16 cs_unicode_to_unicode
+static unicode_t cs_unicode_16_to_unicode (uint32_t enc) { return enc <= 65535 ? enc : NOCHAR; }
static uint32_t cs_unicode_16_from_unicode (unicode_t unicode) { return unicode <= 65535 ? unicode : NOCHAR; }
#define ENCODING_DEFAULT
diff -ur src/encoding.h.orig src/encoding.h
--- src/encoding.h.orig Sun May 21 08:14:15 2006
+++ src/encoding.h Sun May 21 08:16:54 2006
@@ -2,6 +2,7 @@
#define ENCODING_H
#include <inttypes.h>
+#define ENCODING_TO_UNICODE 1
typedef uint32_t unicode_t;
diff -ur src/gentables.orig src/gentables
--- src/gentables Sun May 21 08:14:15 2006
+++ src/gentables.orig Sun May 21 08:15:08 2006
@@ -13,7 +13,7 @@
my $gen;
-$TO_UNICODE = 0; # also generate to_unicode tables
+$TO_UNICODE = 1; # also generate to_unicode tables
sub linear {
my ($a, $l, $h, $b) = @_;