patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Problem: Encoding of error message wrong in Cygwin terminal.
Solution: Get locale from environment variables. (Ken Takata)
diff --git a/src/main.c b/src/main.c
index 5233db5..3b18bf1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2564,6 +2564,21 @@
#if defined(WIN3264) && !defined(FEAT_GUI_W32)
if (is_cygpty_used())
{
+# if defined(FEAT_MBYTE) && defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
+ && defined(FEAT_GETTEXT)
+ char *s, *tofree = NULL;
+
+ /* Set the encoding of the error message based on $LC_ALL or
+ * other environment variables instead of 'encoding'.
+ * Note that the message is shown on a Cygwin terminal (e.g.
+ * mintty) which encoding is based on $LC_ALL or etc., not the
+ * current codepage used by normal Win32 console programs. */
+ tofree = s = enc_locale_env(NULL);
+ if (s == NULL)
+ s = "utf-8"; /* Use "utf-8" by default. */
+ (void)bind_textdomain_codeset(VIMPACKAGE, s);
+ vim_free(tofree);
+# endif
mch_errmsg(_("Vim: Error: This version of Vim does not run in a Cygwin terminal\n"));
exit(1);
}