From: Ben Pfaff <blp@cs.stanford.edu>
Date: Sun, 6 Jan 2019 18:38:50 +0000 (-0800)
Subject: ascii: Always use Unicode boxes by default if appropriate.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c60cba893280a910c4389617d5ae62d21d54a9c5;p=pspp

ascii: Always use Unicode boxes by default if appropriate.

This moves code from the command-line UI so that additional users
can benefit.  Currently that's just the command-line UI anyway
but others are coming.
---

diff --git a/src/output/ascii.c b/src/output/ascii.c
index 1df08c4067..4bad73aece 100644
--- a/src/output/ascii.c
+++ b/src/output/ascii.c
@@ -239,6 +239,19 @@ opt (struct output_driver *d, struct string_map *options, const char *key,
   return driver_option_get (d, options, key, default_value);
 }
 
+/* Return true iff the terminal appears to be an xterm with
+   UTF-8 capabilities */
+static bool
+term_is_utf8_xterm (void)
+{
+  const char *term = getenv ("TERM");
+  const char *xterm_locale = getenv ("XTERM_LOCAL");
+  return (term && xterm_locale
+          && !strcmp (term, "xterm")
+          && (strcasestr (xterm_locale, "utf8")
+              || strcasestr (xterm_locale, "utf-8")));
+}
+
 static struct output_driver *
 ascii_create (struct  file_handle *fh, enum settings_output_devices device_type,
               struct string_map *o)
@@ -266,7 +279,13 @@ ascii_create (struct  file_handle *fh, enum settings_output_devices device_type,
   parse_color (d, o, "background-color", "#FFFFFFFFFFFF", &a->bg);
   parse_color (d, o, "foreground-color", "#000000000000", &a->fg);
 #endif
-  box = parse_enum (opt (d, o, "box", "ascii"),
+
+  const char *default_box = (!strcmp (fh_get_file_name (fh), "-")
+                             && isatty (STDOUT_FILENO)
+                             && (!strcmp (locale_charset (), "UTF-8")
+                                 || term_is_utf8_xterm ())
+                             ? "unicode" : "ascii");
+  box = parse_enum (opt (d, o, "box", default_box),
                     "ascii", BOX_ASCII,
                     "unicode", BOX_UNICODE,
                     NULL_SENTINEL);
diff --git a/src/ui/terminal/terminal-opts.c b/src/ui/terminal/terminal-opts.c
index cd58f81e94..284d2c9d61 100644
--- a/src/ui/terminal/terminal-opts.c
+++ b/src/ui/terminal/terminal-opts.c
@@ -275,33 +275,12 @@ terminal_opts_init (struct argv_parser *ap,
   return to;
 }
 
-/* Return true iff the terminal appears to be an xterm with
-   UTF-8 capabilities */
-static bool
-term_is_utf8_xterm (void)
-{
-  char *s = NULL;
-
-  if ( (s = getenv ("TERM")) && (0 == strcmp ("xterm", s)) )
-    if ( (s = getenv ("XTERM_LOCALE")) )
-      return strcasestr (s, "utf8") || strcasestr (s, "utf-8");
-
-  return false;
-}
-
 void
 terminal_opts_done (struct terminal_opts *to, int argc, char *argv[])
 {
   register_output_driver (to);
   if (!to->has_output_driver)
     {
-      if ((0 == strcmp (locale_charset (), "UTF-8"))
-	  ||
-	  (term_is_utf8_xterm ()) )
-	{
-	  string_map_insert (&to->options, "box", "unicode");
-	}
-
       string_map_insert (&to->options, "output-file", "-");
       string_map_insert (&to->options, "format", "txt");
       register_output_driver (to);