packages feed

termonad 4.1.1.0 → 4.2.0.0

raw patch · 11 files changed

+340/−34 lines, 11 filesdep +aesondep +unordered-containersdep ~basenew-component:exe:termonad-example-colour-extension-papercolourPVP ok

version bump matches the API change (PVP)

Dependencies added: aeson, unordered-containers

Dependency ranges changed: base

API changes (from Hackage documentation)

- Termonad.Pcre: inline_c_ffi_6989586621679102244 :: IO CUInt
+ Termonad.Config.Colour: [highlightBgColour] :: ColourConfig c -> !Option c
+ Termonad.Config.Colour: [highlightFgColour] :: ColourConfig c -> !Option c
+ Termonad.Config.Colour: lensHighlightBgColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
+ Termonad.Config.Colour: lensHighlightFgColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
+ Termonad.Pcre: inline_c_ffi_6989586621679102718 :: IO CUInt
+ Termonad.PreferencesFile: mergeObjVals :: Value -> Value -> Value
+ Termonad.PreferencesFile: readFileWithDefaults :: FilePath -> IO (Either Text ConfigOptions)
+ Termonad.Prelude: data QSem
+ Termonad.Prelude: data QSemN
+ Termonad.Prelude: newQSem :: MonadIO m => Int -> m QSem
+ Termonad.Prelude: newQSemN :: MonadIO m => Int -> m QSemN
+ Termonad.Prelude: signalQSem :: MonadIO m => QSem -> m ()
+ Termonad.Prelude: signalQSemN :: MonadIO m => QSemN -> Int -> m ()
+ Termonad.Prelude: waitQSem :: MonadIO m => QSem -> m ()
+ Termonad.Prelude: waitQSemN :: MonadIO m => QSemN -> Int -> m ()
+ Termonad.Prelude: withQSem :: MonadUnliftIO m => QSem -> m a -> m a
+ Termonad.Prelude: withQSemN :: MonadUnliftIO m => QSemN -> Int -> m a -> m a
- Termonad.Config.Colour: ColourConfig :: !Option c -> !Option c -> !Option c -> !Option c -> !Palette c -> ColourConfig c
+ Termonad.Config.Colour: ColourConfig :: !Option c -> !Option c -> !Option c -> !Option c -> !Option c -> !Option c -> !Palette c -> ColourConfig c
- Termonad.Config.Colour: lensBackgroundColour :: forall c_a1f2j. Lens' (ColourConfig c_a1f2j) (Option c_a1f2j)
+ Termonad.Config.Colour: lensBackgroundColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
- Termonad.Config.Colour: lensCursorBgColour :: forall c_a1f2j. Lens' (ColourConfig c_a1f2j) (Option c_a1f2j)
+ Termonad.Config.Colour: lensCursorBgColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
- Termonad.Config.Colour: lensCursorFgColour :: forall c_a1f2j. Lens' (ColourConfig c_a1f2j) (Option c_a1f2j)
+ Termonad.Config.Colour: lensCursorFgColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
- Termonad.Config.Colour: lensForegroundColour :: forall c_a1f2j. Lens' (ColourConfig c_a1f2j) (Option c_a1f2j)
+ Termonad.Config.Colour: lensForegroundColour :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Option c_a1fij)
- Termonad.Config.Colour: lensPalette :: forall c_a1f2j. Lens' (ColourConfig c_a1f2j) (Palette c_a1f2j)
+ Termonad.Config.Colour: lensPalette :: forall c_a1fij. Lens' (ColourConfig c_a1fij) (Palette c_a1fij)

Files

.nix-helpers/nixpkgs.nix view
@@ -26,13 +26,13 @@     if isNull nixpkgs       then         builtins.fetchTarball {-          # Recent version of nixpkgs master as of 2020-12-27 which uses nightly-2020-12-14.-          url = "https://github.com/NixOS/nixpkgs/archive/84917aa00bf23c88e5874c683abe05edb0ba4078.tar.gz";-          sha256 = "1x3qh815d7k9yc72zpn5cfaaq2b1942q4pka6rx8b5i33yz4m61q";+          # Recent version of nixpkgs master as of 2021-05-09 which uses nightly-2020-05-07.+          url = "https://github.com/NixOS/nixpkgs/archive/1c16013bd6e94da748b41cc123c6b509a23eb440.tar.gz";+          sha256 = "1m2wif0qnci0q14plbqlb95vx214pxqgw5li86lyw6hsiy7y3zfn";         }       else nixpkgs; -  compilerVersion = if isNull compiler then "ghc8103" else compiler;+  compilerVersion = if isNull compiler then "ghc8104" else compiler;    # An overlay that adds termonad to all haskell package sets.   haskellPackagesOverlay = self: super: {@@ -46,12 +46,14 @@                 ".nix-helpers"                 "result"                 ".stack-work"+                "stack.yaml"+                "stack-nightly.yaml"                 ".travis.yml"               ];                src =                 builtins.filterSource-                  (path: type: with self.stdenv.lib;+                  (path: type: with self.lib;                     ! elem (baseNameOf path) filesToIgnore &&                     ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ]                   )
CHANGELOG.md view
@@ -1,3 +1,26 @@+## 4.2.0.0++*   Add new options `highlightFgColour` and `highlightBgColour` for setting+    the color of highlighted text+    [#190](https://github.com/cdepillabout/termonad/pull/190).+    Thanks [@zanculmarktum](https://github.com/zanculmarktum)!++*   Termonad creates a configuration file in `~/.config/termonad/termonad.yaml`+    for use with the Preferences editor.  This is only used if you don't+    have a `termonad.hs` file.++    The configuration file loading code has been updated to be more robust in+    loading configurations that are missing fields.  This means that if you+    update Termonad from an old version, your preferences will still be able to+    be loaded in most cases+    [#191](https://github.com/cdepillabout/termonad/pull/191).  Thanks again+    [@jecaro](https://github.com/jecaro)!++*   Added an+    [example](https://github.com/cdepillabout/termonad/blob/74d04ba1469184cd8667f88d24dfbc7d50d7f658/example-config/ExamplePaperColourColourExtension.hs)+    of how to setup a PaperColour color scheme. Thanks @craigem!+    [#193](https://github.com/cdepillabout/termonad/pull/193)+ ## 4.1.1.0  *   Add new shortcuts to switch to the next and previous tab:
LICENSE view
@@ -1,4 +1,4 @@-Copyright Dennis Gosnell (c) 2018+Copyright Dennis Gosnell (c) 2017-2021  All rights reserved. 
README.md view
@@ -2,13 +2,12 @@ Termonad ========= -[![Build Status](https://secure.travis-ci.org/cdepillabout/termonad.svg)](http://travis-ci.org/cdepillabout/termonad)+[![CI](https://github.com/cdepillabout/termonad/actions/workflows/ci.yml/badge.svg)](https://github.com/cdepillabout/termonad/actions/workflows/ci.yml) [![Hackage](https://img.shields.io/hackage/v/termonad.svg)](https://hackage.haskell.org/package/termonad) [![Stackage LTS](http://stackage.org/package/termonad/badge/lts)](http://stackage.org/lts/package/termonad) [![Stackage Nightly](http://stackage.org/package/termonad/badge/nightly)](http://stackage.org/nightly/package/termonad) [![BSD3 license](https://img.shields.io/badge/license-BSD3-blue.svg)](./LICENSE) [![Join the chat at https://gitter.im/termonad/Lobby](https://badges.gitter.im/termonad/Lobby.svg)](https://gitter.im/termonad/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)-[![Join the chat in #termonad on irc.freenode.net](https://img.shields.io/badge/%23termonad-irc.freenode.net-brightgreen.svg)](https://webchat.freenode.net/)  Termonad is a terminal emulator configurable in Haskell.  It is extremely customizable and provides hooks to modify the default behavior.  It can be
+ example-config/ExamplePaperColourColourExtension.hs view
@@ -0,0 +1,150 @@+{-# LANGUAGE OverloadedStrings #-}+-- | This is an example Termonad configuration that shows how to use the+-- PaperColor colour scheme https://github.com/NLKNguyen/papercolor-theme++module Main where++import Data.Maybe (fromMaybe)+import Termonad+  ( CursorBlinkMode(CursorBlinkModeOn)+  , Option(Set)+  , ShowScrollbar(ShowScrollbarNever)+  , TMConfig+  , confirmExit+  , cursorBlinkMode+  , defaultConfigOptions+  , defaultTMConfig+  , options+  , showMenu+  , showScrollbar+  , start+  , FontConfig+  , FontSize(FontSizePoints)+  , defaultFontConfig+  , fontConfig+  , fontFamily+  , fontSize+  )+import Termonad.Config.Colour+  ( AlphaColour+  , ColourConfig+  , Palette(ExtendedPalette)+  , addColourExtension+  , createColour+  , createColourExtension+  , defaultColourConfig+  , defaultStandardColours+  , defaultLightColours+  , backgroundColour+  , foregroundColour+  , palette+  , List8+  , mkList8+  )++-- This is our main 'TMConfig'.  It holds all of the non-colour settings+-- for Termonad.+--+-- This shows how a few settings can be changed.+myTMConfig :: TMConfig+myTMConfig =+  defaultTMConfig+    { options =+        defaultConfigOptions+          { showScrollbar = ShowScrollbarNever+          , confirmExit = False+          , showMenu = False+          , cursorBlinkMode = CursorBlinkModeOn+          , fontConfig = fontConf+          }+    }++-- This is our PaperColor dark 'ColourConfig'.  It holds all of our dark-related settings.+paperColorDark :: ColourConfig (AlphaColour Double)+paperColorDark =+  defaultColourConfig+    -- Set the default background & foreground colour of text of the terminal.+    { backgroundColour = Set (createColour  28  28  28)  -- black.0+    , foregroundColour = Set (createColour 208 208 208)  -- white.7+    -- Set the extended palette that has 2 Vecs of 8 PaperColor palette colours+    , palette = ExtendedPalette paperColorNormal paperColorBright+    }+  where+    paperColorNormal :: List8 (AlphaColour Double)+    paperColorNormal = fromMaybe defaultStandardColours $ mkList8+      [ createColour  28  28  28 -- black.0+      , createColour 175   0  95 -- red.1+      , createColour  95 175   0 -- green.2+      , createColour 215 175  95 -- yellow.3+      , createColour  95 175 215 -- blue.4+      , createColour 128 128 128 -- purple.5+      , createColour 215 135  95 -- aqua.6+      , createColour 208 208 208 -- white.7+      ]++    paperColorBright :: List8 (AlphaColour Double)+    paperColorBright = fromMaybe defaultStandardColours $ mkList8+      [ createColour  88  88  88 -- black.8+      , createColour  95 175  95 -- red.9+      , createColour 175 215   0 -- green.10+      , createColour 175 135 215 -- yellow.11+      , createColour 255 175   0 -- blue.12+      , createColour 255  95 175 -- purple.13+      , createColour   0 175 175 -- aqua.14+      , createColour  95 135 135 -- white.15+      ]++-- This is our PaperColor light 'ColourConfig'.  It holds all of our light-related settings+paperColorLight :: ColourConfig (AlphaColour Double)+paperColorLight =+  defaultColourConfig+    -- Set the default background & foreground colour of text of the terminal.+    { backgroundColour = Set (createColour 238 238 238) -- black.0+    , foregroundColour = Set (createColour  68  68  68) -- white.7+    -- Set the extended palette that has 2 Vecs of 8 PaperColor palette colours+    , palette = ExtendedPalette paperColorNormal paperColorBright+    }+  where+    paperColorNormal :: List8 (AlphaColour Double)+    paperColorNormal = fromMaybe defaultLightColours $ mkList8+      [ createColour 238 238 238 -- black.0+      , createColour 175   0   0 -- red.1+      , createColour   0 135   0 -- green.2+      , createColour  95 135   0 -- yellow.3+      , createColour   0 135 175 -- blue.4+      , createColour 135 135 135 -- purple.5+      , createColour   0  95 135 -- aqua.6+      , createColour  68  68  68 -- white.7+      ]++    paperColorBright :: List8 (AlphaColour Double)+    paperColorBright = fromMaybe defaultLightColours $ mkList8+      [ createColour 188 188 188 -- black.8+      , createColour 215   0   0 -- red.9+      , createColour 215   0 135 -- green.10+      , createColour 135   0 175 -- yellow.11+      , createColour 215  95   0 -- blue.12+      , createColour 215  95   0 -- purple.13+      , createColour   0  95 175 -- aqua.14+      , createColour   0  95 135 -- white.15+      ]+++-- This defines the font for the terminal.+fontConf :: FontConfig+fontConf =+  defaultFontConfig+    { fontFamily = "Monospace"+    , fontSize = FontSizePoints 12+    }++main :: IO ()+main = do+  -- First, create the colour extension based on either PaperColor modules.+  myColourExt <- createColourExtension paperColorLight++  -- Update 'myTMConfig' with our colour extension.+  let newTMConfig = addColourExtension myTMConfig myColourExt++  -- Start Termonad with our updated 'TMConfig'.+  start newTMConfig
shell.nix view
@@ -24,6 +24,11 @@ # will also index the Termonad libraries, however this will mean the environment # will need to be rebuilt every time the termonad source changes. -{ compiler ? null, indexTermonad ? false, nixpkgs ? null, additionalOverlays ? [] }@args:+{ compiler ? null+, indexTermonad ? false+, nixpkgs ? null+, buildExamples ? false+, additionalOverlays ? []+}@args:  (import .nix-helpers/nixpkgs.nix args).termonadShell
src/Termonad/App.hs view
@@ -68,8 +68,6 @@   , labelNew   , notebookGetNPages   , notebookNew-  , notebookNextPage-  , notebookPrevPage   , notebookSetShowBorder   , onEntryActivate   , onNotebookPageRemoved
src/Termonad/Config/Colour.hs view
@@ -50,6 +50,8 @@     , lensCursorBgColour     , lensForegroundColour     , lensBackgroundColour+    , lensHighlightFgColour+    , lensHighlightBgColour     , lensPalette     -- * Colour Extension     , ColourExtension(..)@@ -119,6 +121,8 @@ #endif   , terminalSetColorBackground   , terminalSetColorForeground+  , terminalSetColorHighlight+  , terminalSetColorHighlightForeground   ) import Text.Printf (printf) import Text.Show (showString)@@ -672,11 +676,14 @@ -- 'foregroundColour' and 'backgroundColour' allow you to set the color of the -- foreground text and background of the terminal. --+-- 'highlightFgColour' and 'highlightBgColour' allow you to set the color of+-- the foreground and background of the highlighted text.+-- -- 'palette' allows you to set the full color palette used by the terminal. -- See 'Palette' for more information. ----- If you don't set 'foregroundColour', 'backgroundColour', or 'palette', the--- defaults from VTE are used.+-- If you don't set 'foregroundColour', 'backgroundColour', 'highlightFgColour',+-- 'highlightBgColour', or 'palette', the defaults from VTE are used. -- -- If you want to use a terminal with a white (or light) background and a black -- foreground, it may be a good idea to change some of the colors in the@@ -751,22 +758,28 @@     -- ^ Color of the default foreground text in the terminal.   , backgroundColour :: !(Option c)     -- ^ Background color for the terminal+  , highlightFgColour :: !(Option c)+    -- ^ Foreground color for the highlighted text.+  , highlightBgColour :: !(Option c)+    -- ^ Background color for the highlighted text.   , palette :: !(Palette c)     -- ^ Color palette for the terminal.  See 'Palette'.   } deriving (Eq, Show, Functor)  -- | Default setting for a 'ColourConfig'.  The cursor colors, font foreground--- color, background color, and color palette are all left at the defaults set--- by VTE.+-- color, background color, highlighted text color, and color palette are all+-- left at the defaults set by VTE. -- -- >>> defaultColourConfig--- ColourConfig {cursorFgColour = Unset, cursorBgColour = Unset, foregroundColour = Unset, backgroundColour = Unset, palette = NoPalette}+-- ColourConfig {cursorFgColour = Unset, cursorBgColour = Unset, foregroundColour = Unset, backgroundColour = Unset, highlightFgColour = Unset, highlightBgColour = Unset, palette = NoPalette} defaultColourConfig :: ColourConfig (AlphaColour Double) defaultColourConfig = ColourConfig   { cursorFgColour = Unset   , cursorBgColour = Unset   , foregroundColour = Unset   , backgroundColour = Unset+  , highlightFgColour = Unset+  , highlightBgColour = Unset   , palette = NoPalette   } @@ -775,6 +788,8 @@     , ("cursorBgColour", "lensCursorBgColour")     , ("foregroundColour", "lensForegroundColour")     , ("backgroundColour", "lensBackgroundColour")+    , ("highlightFgColour", "lensHighlightFgColour")+    , ("highlightBgColour", "lensHighlightBgColour")     , ("palette", "lensPalette")     ]     ''ColourConfig@@ -813,6 +828,10 @@   whenSet (cursorFgColour colourConf) $     terminalSetColorCursorForeground vteTerm . Just <=< colourToRgba #endif+  whenSet (highlightFgColour colourConf) $+    terminalSetColorHighlightForeground vteTerm . Just <=< colourToRgba+  whenSet (highlightBgColour colourConf) $+    terminalSetColorHighlight vteTerm . Just <=< colourToRgba  colourToRgba :: AlphaColour Double -> IO RGBA colourToRgba colour = do
src/Termonad/PreferencesFile.hs view
@@ -3,7 +3,12 @@  import Termonad.Prelude -import Data.Yaml (decodeFileEither, encode, prettyPrintParseException)+import Control.Monad.Trans.Except (ExceptT(..), runExceptT, throwE, withExceptT)+import Data.Aeson (Result(..), fromJSON)+import qualified Data.HashMap.Strict as HashMap+import Data.Yaml (ParseException, ToJSON (toJSON), decodeFileEither, encode, prettyPrintParseException)+import Data.Yaml.Aeson (Value(..))+ import System.Directory   ( XdgDirectory(XdgConfig)   , createDirectoryIfMissing@@ -30,6 +35,9 @@ -- @~\/.config\/termonad\/termonad.yaml@. This file stores only the 'options' of -- 'TMConfig' so 'hooks' are initialized with 'defaultConfigHooks'.  If the -- file doesn't exist, create it with the default values.+--+-- Any options that do not exist will get initialized with values from+-- 'defaultConfigOptions'. tmConfigFromPreferencesFile :: IO TMConfig tmConfigFromPreferencesFile = do   confFile <- getPreferencesFile@@ -37,15 +45,110 @@   exists <- doesFileExist confFile   unless exists $ writePreferencesFile confFile defaultConfigOptions   -- Read the configuration file-  eitherOptions <- decodeFileEither confFile+  eitherOptions <- readFileWithDefaults confFile   options <-     case eitherOptions of       Left err -> do-        hPutStrLn stderr $ "Error parsing file " <> pack confFile-        hPutStrLn stderr $ pack $ prettyPrintParseException err+        hPutStrLn stderr $ "Error parsing file " <> pack confFile <> ": " <> err         pure defaultConfigOptions       Right options -> pure options-  pure $ TMConfig { options = options, hooks = defaultConfigHooks }+  pure TMConfig { options = options, hooks = defaultConfigHooks }++-- | Read the 'ConfigOptions' out of a configuration file.+--+-- Merge the raw 'ConfigOptions' with 'defaultConfigOptions'.  This makes sure+-- that old versions of the configuration file will still be able to be read+-- even if new options are added to 'ConfigOptions' in new versions of+-- Termonad.+readFileWithDefaults :: FilePath -> IO (Either Text ConfigOptions)+readFileWithDefaults file = runExceptT $ do+  -- Read the configuration file as a JSON object+  optsFromFile :: Value <-+    withExceptT parseExceptionToText . ExceptT $ decodeFileEither file+  let optsDefault :: Value = toJSON $ defaultConfigOptions+  -- Then merge it with the default options in JSON before converting it to+  -- a 'ConfigOptions'+  resultToExcept . fromJSON $ mergeObjVals optsFromFile optsDefault+  where+    parseExceptionToText :: ParseException -> Text+    parseExceptionToText = pack . prettyPrintParseException++    resultToExcept :: Result a -> ExceptT Text IO a+    resultToExcept (Success v) = pure v+    resultToExcept (Error str) = throwE (pack str)++-- | Merge 'Value's recursively.+--+-- This merges 'Value's recursively in 'Object' values, taking values that+-- have been explicitly over the defaults.  The defaults are only used if+-- there is no value that has been explicitly set.+--+-- For 'Array', 'String', 'Number', 'Bool', and 'Null', take the first 'Value'+-- (the one that has been explicitly set in the user's config file):+--+-- >>> mergeObjVals (Array [Number 1, Number 2]) (Array [String "hello"])+-- Array [Number 1.0,Number 2.0]+-- >>> mergeObjVals (String "hello") (String "bye")+-- String "hello"+-- >>> mergeObjVals (Number 1) (Number 2)+-- Number 1.0+-- >>> mergeObjVals (Bool True) (Bool False)+-- Bool True+-- >>> mergeObjVals Null Null+-- Null+--+-- Note that 'Value's in 'Array's are not recursed into:+--+-- >>> let obj1 = Object $ HashMap.singleton "hello" (Number 2)+-- >>> let obj2 = Object $ HashMap.singleton "hello" (String "bye")+-- >>> mergeObjVals (Array [obj1]) (Array [obj2])+-- Array [Object (fromList [("hello",Number 2.0)])]+--+-- 'Object's are recursed into.  Unique keys from both Maps will be used.+-- Keys that are in both Maps will be merged according to the rules above:+--+-- >>> let hash1 = HashMap.fromList [("hello", Number 1), ("bye", Number 100)]+-- >>> let hash2 = HashMap.fromList [("hello", Number 2), ("goat", String "chicken")]+-- >>> mergeObjVals (Object hash1) (Object hash2)+-- Object (fromList [("bye",Number 100.0),("goat",String "chicken"),("hello",Number 1.0)])+--+-- 'Value's of different types will use the second 'Value':+--+-- >>> mergeObjVals Null (String "bye")+-- String "bye"+-- >>> mergeObjVals (Bool True) (Number 2)+-- Number 2.0+-- >>> mergeObjVals (Object mempty) (Bool False)+-- Bool False+--+mergeObjVals+  :: Value+     -- ^ Value that has been set explicitly in the User's configuration+     -- file.+  -> Value+     -- ^ Default value that will be used if no explicitly set value.+  -> Value+     -- ^ Merged values.+mergeObjVals optsFromFile optsDefault =+  case (optsFromFile, optsDefault) of+    -- Both the options from the file and the default options are an Object+    -- here.  Recursively merge the keys and values.+    (Object optsFromFileHashMap, Object optsDefaultHashMap) ->+      Object $ HashMap.unionWith mergeObjVals optsFromFileHashMap optsDefaultHashMap+    -- Both the value from the file and the default value are the same type.+    -- Use the value from the file.+    --+    -- XXX: This will end up causing readFileWithDefaults to fail if the value+    -- from the file is old and can no longer properly be decoded into a value+    -- expected by ConfigOptions.+    (Array fromFile, Array _) -> Array fromFile+    (String fromFile, String _) -> String fromFile+    (Number fromFile, Number _) -> Number fromFile+    (Bool fromFile, Bool _) -> Bool fromFile+    (Null, Null) -> Null+    -- The value from the file and the default value are different types. Just+    -- use the default value.+    (_, defVal) -> defVal  writePreferencesFile :: FilePath -> ConfigOptions -> IO () writePreferencesFile confFile options = do
termonad.cabal view
@@ -1,5 +1,5 @@ name:                termonad-version:             4.1.1.0+version:             4.2.0.0 synopsis:            Terminal emulator configurable in Haskell description:   Termonad is a terminal emulator configurable in Haskell.  It is extremely@@ -16,7 +16,7 @@ license-file:        LICENSE author:              Dennis Gosnell maintainer:          cdep.illabout@gmail.com-copyright:           2017 Dennis Gosnell+copyright:           2017-2021 Dennis Gosnell category:            Text build-type:          Custom cabal-version:       1.12@@ -64,6 +64,7 @@   other-modules:       Paths_termonad   build-depends:       base >= 4.13 && < 5                      , adjunctions+                     , aeson                      , classy-prelude                      , colour                      , constraints@@ -89,9 +90,10 @@                      , QuickCheck                      , text                      , transformers-                     , yaml+                     , unordered-containers                      , xml-conduit                      , xml-html-qq+                     , yaml   default-language:    Haskell2010   ghc-options:         -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates   default-extensions:  DataKinds@@ -149,14 +151,7 @@                      , template-haskell                      , termonad   default-language:    Haskell2010-  ghc-options:         -Wall -threaded -rtsopts -with-rtsopts=-N-  -- For some reason doctests appear to be segfaulting when compiling with-  -- ghc-8.10.3, so only build them when using ghc-8.10.2 or earlier.-  -- See https://github.com/cdepillabout/termonad/issues/174.-  if impl(ghc <= 8.10.2)-    buildable:         True-  else-    buildable:         False+  ghc-options:         -Wall  test-suite termonad-test   type:                exitcode-stdio-1.0@@ -225,6 +220,19 @@  executable termonad-example-colour-extension-gruvbox   main-is:             example-config/ExampleGruvboxColourExtension.hs+  build-depends:       base+                     , termonad+                     , colour+  default-language:    Haskell2010+  ghc-options:         -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -threaded -rtsopts -with-rtsopts=-N++  if flag(buildexamples)+    buildable:         True+  else+    buildable:         False++executable termonad-example-colour-extension-papercolour+  main-is:             example-config/ExamplePaperColourColourExtension.hs   build-depends:       base                      , termonad                      , colour
test/readme/README.lhs view
@@ -2,13 +2,12 @@ Termonad ========= -[![Build Status](https://secure.travis-ci.org/cdepillabout/termonad.svg)](http://travis-ci.org/cdepillabout/termonad)+[![CI](https://github.com/cdepillabout/termonad/actions/workflows/ci.yml/badge.svg)](https://github.com/cdepillabout/termonad/actions/workflows/ci.yml) [![Hackage](https://img.shields.io/hackage/v/termonad.svg)](https://hackage.haskell.org/package/termonad) [![Stackage LTS](http://stackage.org/package/termonad/badge/lts)](http://stackage.org/lts/package/termonad) [![Stackage Nightly](http://stackage.org/package/termonad/badge/nightly)](http://stackage.org/nightly/package/termonad) [![BSD3 license](https://img.shields.io/badge/license-BSD3-blue.svg)](./LICENSE) [![Join the chat at https://gitter.im/termonad/Lobby](https://badges.gitter.im/termonad/Lobby.svg)](https://gitter.im/termonad/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)-[![Join the chat in #termonad on irc.freenode.net](https://img.shields.io/badge/%23termonad-irc.freenode.net-brightgreen.svg)](https://webchat.freenode.net/)  Termonad is a terminal emulator configurable in Haskell.  It is extremely customizable and provides hooks to modify the default behavior.  It can be