@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveDataTypeable #-}
23{-# LANGUAGE FlexibleContexts, FlexibleInstances #-}
34{-# LANGUAGE TypeOperators #-}
@@ -75,7 +76,10 @@ import Control.Exception (catch, IOException, Exception(..), throwIO)
7576import Control.Monad (liftM, guard, void)
7677
7778import qualified Data.ByteString as BS
78−import Data.Monoid
79+import Data.Monoid (Monoid(..))
80+#if !(MIN_VERSION_base(4,11,0))
81+import Data.Semigroup (Semigroup(..))
82+#endif
7983import Data.Typeable (Typeable)
8084
8185import Graphics.Vty.Input.Events
@@ -137,6 +141,20 @@ data Config = Config
137141defaultConfig :: Config
138142defaultConfig = mempty
139143
144+instance Semigroup Config where
145+ c0 <> c1 = Config
146+ -- latter config takes priority for everything but inputMap
147+ { vmin = vmin c1 <|> vmin c0
148+ , vtime = vtime c1 <|> vtime c0
149+ , mouseMode = mouseMode c1
150+ , bracketedPasteMode = bracketedPasteMode c1
151+ , debugLog = debugLog c1 <|> debugLog c0
152+ , inputMap = inputMap c0 <> inputMap c1
153+ , inputFd = inputFd c1 <|> inputFd c0
154+ , outputFd = outputFd c1 <|> outputFd c0
155+ , termName = termName c1 <|> termName c0
156+ }
157+
140158instance Monoid Config where
141159 mempty = Config
142160 { vmin = Nothing
@@ -149,18 +167,9 @@ instance Monoid Config where
149167 , outputFd = Nothing
150168 , termName = Nothing
151169 }
152− mappend c0 c1 = Config
153− -- latter config takes priority for everything but inputMap
154− { vmin = vmin c1 <|> vmin c0
155− , vtime = vtime c1 <|> vtime c0
156− , mouseMode = mouseMode c1
157− , bracketedPasteMode = bracketedPasteMode c1
158− , debugLog = debugLog c1 <|> debugLog c0
159− , inputMap = inputMap c0 <> inputMap c1
160− , inputFd = inputFd c1 <|> inputFd c0
161− , outputFd = outputFd c1 <|> outputFd c0
162− , termName = termName c1 <|> termName c0
163− }
170+#if !(MIN_VERSION_base(4,11,0))
171+ mappend = (<>)
172+#endif
164173
165174-- | Load a configuration from @'getAppUserDataDirectory'/config@ and
166175-- @$VTY_CONFIG_FILE@.