on master help sign in
Only emit UTF8 charset sequences in terminals without a preexisting UTF8 declaration (fixes #89)
commit4a48e17830fe551915a8d7c1d9efc61c4ddfd6ad authorJonathan Daugherty <cygnus@foobox.com> dateSun 28 Aug 2016, 11:40 (10 years ago) parent1d908d3
1 file changed+17−2
src/Graphics/Vty/Output/XTermColor.hs+17−2
src/Graphics/Vty/Output/XTermColor.hs+17−2
@@ -21,12 +21,17 @@ import Data.IORef
2121
2222import System.Posix.IO (fdWrite)
2323import System.Posix.Types (Fd)
24+import System.Posix.Env (getEnv)
2425
2526#if !(MIN_VERSION_base(4,8,0))
2627import Control.Applicative
2728import Data.Foldable (foldMap)
2829#endif
2930
31+import Data.List (isInfixOf)
32+import Data.Maybe (catMaybes)
33+import Data.Monoid ((<>))
34+
3035-- | Initialize the display to UTF-8.
3136reserveTerminal :: ( Applicative m, MonadIO m ) => String -> Fd -> m Output
3237reserveTerminal variant outFd = liftIO $ do
@@ -34,7 +39,9 @@ reserveTerminal variant outFd = liftIO $ do
3439 -- If the terminal variant is xterm-color use xterm instead since, more often than not,
3540 -- xterm-color is broken.
3641 let variant' = if variant == "xterm-color" then "xterm" else variant
37− flushedPut setUtf8CharSet
42+
43+ utf8a <- utf8Active
44+ when (not utf8a) $ flushedPut setUtf8CharSet
3845 t <- TerminfoBased.reserveTerminal variant' outFd
3946
4047 mouseModeStatus <- newIORef False
@@ -61,7 +68,7 @@ reserveTerminal variant outFd = liftIO $ do
6168 let t' = t
6269 { terminalID = terminalID t ++ " (xterm-color)"
6370 , releaseTerminal = do
64− liftIO $ flushedPut setDefaultCharSet
71+ when (not utf8a) $ liftIO $ flushedPut setDefaultCharSet
6572 setMode t' BracketedPaste False
6673 setMode t' Mouse False
6774 releaseTerminal t
@@ -74,6 +81,14 @@ reserveTerminal variant outFd = liftIO $ do
7481 }
7582 return t'
7683
84+utf8Active :: IO Bool
85+utf8Active = do
86+ let vars = ["LC_ALL", "LANG", "LC_CTYPE"]
87+ results <- catMaybes <$> mapM getEnv vars
88+ let matches = filter ("UTF8" `isInfixOf`) results <>
89+ filter ("UTF-8" `isInfixOf`) results
90+ return $ not $ null matches
91+
7792-- | Enable bracketed paste mode:
7893-- http://cirw.in/blog/bracketed-paste
7994enableBracketedPastes :: String