File: ExamplePaperColourColourExtension.hs

package info (click to toggle)
haskell-termonad 4.5.0.0-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 476 kB
  • sloc: haskell: 3,784; makefile: 7
file content (150 lines) | stat: -rw-r--r-- 4,901 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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