From 8105f14f2cd08f146f4e978ae05226199ec473a9 Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Tue, 9 Feb 2016 12:37:56 +0300 Subject: [PATCH 1/2] Add option for stdio encoding, set stdin encoding --- Language/Haskell/GhcMod/Types.hs | 2 ++ src/GHCMod.hs | 10 ++++++---- src/GHCMod/Options.hs | 6 ++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Language/Haskell/GhcMod/Types.hs b/Language/Haskell/GhcMod/Types.hs index 779c5c9..42dac13 100644 --- a/Language/Haskell/GhcMod/Types.hs +++ b/Language/Haskell/GhcMod/Types.hs @@ -105,6 +105,7 @@ data Options = Options { -- | GHC command line options set on the @ghc-mod@ command line , optGhcUserOptions :: [GHCOption] , optFileMappings :: [(FilePath, Maybe FilePath)] + , optEncoding :: String } deriving (Show) -- | A default 'Options'. @@ -124,6 +125,7 @@ defaultOptions = Options { } , optGhcUserOptions = [] , optFileMappings = [] + , optEncoding = "UTF-8" } ---------------------------------------------------------------- diff --git a/src/GHCMod.hs b/src/GHCMod.hs index fdade72..531f7de 100644 --- a/src/GHCMod.hs +++ b/src/GHCMod.hs @@ -34,9 +34,12 @@ handler = flip gcatches ] main :: IO () -main = do - hSetEncoding stdout utf8 - parseArgs >>= \res@(globalOptions, _) -> +main = + parseArgs >>= \res@(globalOptions, _) -> do + enc <- mkTextEncoding $ optEncoding globalOptions + hSetEncoding stdout enc + hSetEncoding stderr enc + hSetEncoding stdin enc catches (progMain res) [ Handler $ \(e :: GhcModError) -> runGmOutT globalOptions $ exitError $ renderStyle ghcModStyle (gmeDoc e) @@ -107,7 +110,6 @@ getFileSourceFromStdin = do then fmap (x:) readStdin' else return [] --- Someone please already rewrite the cmdline parsing code *weep* :'( wrapGhcCommands :: (IOish m, GmOut m) => Options -> GhcModCommands -> m () wrapGhcCommands _opts CmdRoot = gmPutStr =<< rootInfo wrapGhcCommands opts cmd = diff --git a/src/GHCMod/Options.hs b/src/GHCMod/Options.hs index 0a2a73e..40c8fdd 100644 --- a/src/GHCMod/Options.hs +++ b/src/GHCMod/Options.hs @@ -174,6 +174,12 @@ globalArgSpec = Options <=> metavar "OPT" <=> help "Option to be passed to GHC" <*> many fileMappingSpec + <*> strOption + $$ long "encoding" + <=> short 'e' + <=> value "UTF-8" + <=> showDefault + <=> help "I/O encoding" where fileMappingSpec = getFileMapping . splitOn '=' <$> strOption From 98b2e4dac265086447ba20f381f6d97cc1c4db46 Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Tue, 9 Feb 2016 12:42:47 +0300 Subject: [PATCH 2/2] Since a backend option, remove encoding short opt --- src/GHCMod/Options.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/GHCMod/Options.hs b/src/GHCMod/Options.hs index 40c8fdd..e654c7e 100644 --- a/src/GHCMod/Options.hs +++ b/src/GHCMod/Options.hs @@ -176,7 +176,6 @@ globalArgSpec = Options <*> many fileMappingSpec <*> strOption $$ long "encoding" - <=> short 'e' <=> value "UTF-8" <=> showDefault <=> help "I/O encoding"