module Util where
import Prelude ()
import Prelude.Compat
import Control.Exception
import Data.List.Compat
import System.Console.ANSI
import System.FilePath
import System.Posix.Files
import System.Posix.Types
withInfoColor :: IO a -> IO a
withInfoColor = bracket_ set reset
where
set = setSGR [SetColor Foreground Dull Magenta]
reset = setSGR []
isBoring :: FilePath -> Bool
isBoring p = ".git" `elem` dirs || "dist" `elem` dirs || isEmacsAutoSave p
where
dirs = splitDirectories p
isEmacsAutoSave = isPrefixOf ".#" . takeFileName
normalizeTypeSignatures :: String -> String
normalizeTypeSignatures = normalize . concatMap replace
where
normalize = \case
xs | "\n :: " `isPrefixOf` xs -> normalizeTypeSignatures (drop 2 xs)
x : xs -> x : normalizeTypeSignatures xs
[] -> []
replace c = case c of
'\8759' -> "::"
'\8594' -> "->"
_ -> [c]
dotGhciWritableByOthers :: IO Bool
dotGhciWritableByOthers = do
exists <- fileExist ".ghci"
if exists then do
mode <- fileMode <$> getFileStatus ".ghci"
dirMode <- fileMode <$> getFileStatus "."
return (writableByOthers mode || writableByOthers dirMode)
else
return False
writableByOthers :: FileMode -> Bool
writableByOthers mode = m /= nullFileMode
where
m = intersectFileModes (unionFileModes otherWriteMode groupWriteMode) mode