diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-08-17 12:00:54 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-08-17 12:01:26 -0700 |
commit | 7f2b98d09d113e0f9b1fffb0524622adfafe3ac4 (patch) | |
tree | 0bf33b3ebf47f3fcbec56119f043dde60227efcd /src/emacs.c | |
parent | 481859ba71253725f4aed4877b89123e11aaef0c (diff) | |
download | emacs-7f2b98d09d113e0f9b1fffb0524622adfafe3ac4.tar.gz emacs-7f2b98d09d113e0f9b1fffb0524622adfafe3ac4.tar.bz2 emacs-7f2b98d09d113e0f9b1fffb0524622adfafe3ac4.zip |
Curved quotes in --batch diagnostics in non-UTF-8
When run with --batch, check that curved quotes are compatible with
the system locale before outputting them in diagnostics.
Problem reported by Eli Zaretskii in:
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00594.html
* lisp/startup.el (command-line): Set internal--text-quoting-flag
after the standard display table is initialized.
* src/doc.c (default_to_grave_quoting_style): New function.
(text_quoting_style): Use it.
(text_quoting_flag): New static var, visible to Lisp as
internal--text-quoting-flag.
* src/emacs.c: Include <wchar.h> if available.
(using_utf8): New function.
(main): Use it to initialize text_quoting_flag.
* src/regex.h (btowc) [WIDE_CHAR_SUPPORT && emacs]:
Don't define, as it's not needed and it clashes with wchar.h.
Diffstat (limited to 'src/emacs.c')
-rw-r--r-- | src/emacs.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/emacs.c b/src/emacs.c index 80bb70cedeb..1392209f585 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -95,6 +95,10 @@ extern void moncontrol (int mode); #include <locale.h> #endif +#if HAVE_WCHAR_H +# include <wchar.h> +#endif + #ifdef HAVE_SETRLIMIT #include <sys/time.h> #include <sys/resource.h> @@ -344,6 +348,19 @@ setlocale (int cat, char const *locale) } #endif +/* True if the current system locale uses UTF-8 encoding. */ +static bool +using_utf8 (void) +{ +#ifdef HAVE_WCHAR_H + wchar_t wc; + mbstate_t mbs = { 0 }; + return mbrtowc (&wc, "\xc4\x80", 2, &mbs) == 2 && wc == 0x100; +#else + return false; +#endif +} + /* Report a fatal error due to signal SIG, output a backtrace of at most BACKTRACE_LIMIT lines, and exit. */ @@ -924,6 +941,7 @@ main (int argc, char **argv) fixup_locale must wait until later, since it builds strings. */ if (do_initial_setlocale) setlocale (LC_ALL, ""); + text_quoting_flag = using_utf8 (); inhibit_window_system = 0; |