ascii: Always use Unicode boxes by default if appropriate.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Jan 2019 18:38:50 +0000 (10:38 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Jan 2019 21:17:31 +0000 (13:17 -0800)
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.

src/output/ascii.c
src/ui/terminal/terminal-opts.c

index 1df08c40674dab03cb05b02d5fa6cb85a4847578..4bad73aeceef5d32f70051ed89431d165eb1898c 100644 (file)
@@ -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);
index cd58f81e94d8a123b7ee8c0511e528dc0fc75ba4..284d2c9d6115e9f4ae7477caac58544599ada0a6 100644 (file)
@@ -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);