--- less-381/charset.c.orig 2004-02-29 18:44:58.924400032 +0100 +++ less-381/charset.c 2004-02-29 18:54:08.049920264 +0100 @@ -18,13 +18,14 @@ #if HAVE_LOCALE #include #include +#include #endif public int utf_mode = 0; /* * Predefined character sets, - * selected by the LESSCHARSET environment variable. + * selected by the locale or the LESSCHARSET environment variable. */ struct charset { char *name; @@ -216,6 +217,16 @@ binfmt = s; } +static char * +charmap2chardef(const char *s) { + if (strcmp(s, "UTF-8") == 0) return "utf-8"; + if (strncmp(s, "ISO-8859-", 9) == 0) return "iso8859"; + if (strcmp(s, "ANSI_X3.4-1968") == 0) return "ascii"; + if (strcmp(s, "KOI8-R") == 0) return "koi8-r"; + /* The charmap hasn't been recognized */ + return NULL; +} + /* * Initialize charset data structures. */ @@ -242,18 +253,14 @@ ichardef(s); return; } - -#if HAVE_STRSTR /* - * Check whether LC_ALL, LC_CTYPE or LANG look like UTF-8 is used. + * Use the locale charset as a fallback. */ - if ((s = lgetenv("LC_ALL")) != NULL || - (s = lgetenv("LC_CTYPE")) != NULL || - (s = lgetenv("LANG")) != NULL) - { - if (strstr(s, "UTF-8") != NULL || strstr(s, "utf-8") != NULL) - if (icharset("utf-8")) - return; +#if HAVE_LOCALE + setlocale(LC_ALL, ""); + s = charmap2chardef(nl_langinfo(CODESET)); + if (s != NULL) { + if (icharset(s)) return; } #endif --- less-381/less.nro.orig 2004-02-29 18:57:02.153452504 +0100 +++ less-381/less.nro 2004-02-29 18:59:32.351618912 +0100 @@ -1102,7 +1102,12 @@ .PP A "character set" is simply a description of which characters are to be considered normal, control, and binary. -The LESSCHARSET environment variable may be used to select a character set. +If available, the locale settings are used to determine the character set +used. The following locale character maps are recognized: UTF-8, +ANSI_X3.4-1968, KOI8-R, ISO-8859-*. If the locale-based selection fails +for you, +the LESSCHARSET environment variable may be used to select a character +set. Possible values for LESSCHARSET are: .IP ascii BS, TAB, NL, CR, and formfeed are control characters,