summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Mordechai <ronmrdechai@gmail.com>2019-08-18 19:22:01 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-09-27 22:11:06 -0400
commit9c02a793be61a66bc091729f50e567096ab74a5c (patch)
tree5bc3d9ae128c27a730def0eb9d46026e9d828b59
parent289fc8da2a29dab8282538a0ddc5db7617cdca5b (diff)
downloadhaskell-9c02a793be61a66bc091729f50e567096ab74a5c.tar.gz
Allow users to disable Unicode with an env var
Unicode renders funny on my terminal and I like to avoid it where possible. Most applications which print out non-ascii characters allow users to disable such prints with an environment variable (e.g. Homebrew). This diff disables Unicode usage when the environment variable `GHC_NO_UNICODE` is set. To test, set the env var and compile a bad program. Note that GHC does not print Unicode bullets but instead prints out asterisks: ``` $ GHC_NO_UNICODE= _build/stage1/bin/ghc ../Temp.hs [1 of 1] Compiling Temp ( ../Temp.hs, ../Temp.o ) ../Temp.hs:4:23: error: * Couldn't match type `Bool' with `a -> Bool' Expected type: Bool -> a -> Bool Actual type: Bool -> Bool * In the first argument of `foldl', namely `(&& (flip $ elem u))' In the expression: foldl (&& (flip $ elem u)) True v In an equation for `isPermut': isPermut u v = foldl (&& (flip $ elem u)) True v * Relevant bindings include v :: [a] (bound at ../Temp.hs:4:12) u :: [a] (bound at ../Temp.hs:4:10) isPermut :: [a] -> [a] -> Bool (bound at ../Temp.hs:4:1) | 4 | isPermut u v = foldl (&& (flip $ elem u)) True v | ^^^^^^^^^^^^^^^^^^ ``` (Broken code taken from Stack Overflow)
-rw-r--r--compiler/main/DynFlags.hs6
-rw-r--r--docs/users_guide/using.rst11
2 files changed, 16 insertions, 1 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 429857ad62..f809bc330f 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -1894,6 +1894,10 @@ initDynFlags dflags = do
do str' <- peekCString enc cstr
return (str == str'))
`catchIOError` \_ -> return False
+ maybeGhcNoUnicodeEnv <- lookupEnv "GHC_NO_UNICODE"
+ let adjustNoUnicode (Just _) = False
+ adjustNoUnicode Nothing = True
+ let useUnicode' = (adjustNoUnicode maybeGhcNoUnicodeEnv) && canUseUnicode
canUseColor <- stderrSupportsAnsiColors
maybeGhcColorsEnv <- lookupEnv "GHC_COLORS"
maybeGhcColoursEnv <- lookupEnv "GHC_COLOURS"
@@ -1909,7 +1913,7 @@ initDynFlags dflags = do
dirsToClean = refDirsToClean,
generatedDumps = refGeneratedDumps,
nextWrapperNum = wrapperNum,
- useUnicode = canUseUnicode,
+ useUnicode = useUnicode',
useColor = useColor',
canUseColor = canUseColor,
colScheme = colScheme',
diff --git a/docs/users_guide/using.rst b/docs/users_guide/using.rst
index 8462a87cd8..d97e3bd2e8 100644
--- a/docs/users_guide/using.rst
+++ b/docs/users_guide/using.rst
@@ -1153,3 +1153,14 @@ Some flags only make sense for a particular use case.
included. This option can be used to specify the path to the
``ghcversions.h`` file to be included. This is primarily intended to be
used by GHC's build system.
+
+Other environment variables
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. index::
+ single: environment variables
+
+GHC can also be configured using environment variables. Currently the only
+variable it supports is ``GHC_NO_UNICODE``, which, when set, disables Unicode
+output regardless of locale settings. ``GHC_NO_UNICODE`` can be set to anything
++(event an empty string) to trigger this behaviour.