File: AttrDemo.hs

package info (click to toggle)
haskell-brick 2.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,344 kB
  • sloc: haskell: 9,168; makefile: 3
file content (80 lines) | stat: -rw-r--r-- 2,767 bytes parent folder | download | duplicates (2)
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
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
module Main where

#if !(MIN_VERSION_base(4,11,0))
import Data.Monoid
#endif
import Graphics.Vty
  ( Attr, white, blue, cyan, green, red, yellow
  , black, withURL
  )

import Brick.Main
import Brick.Types
  ( Widget
  )
import Brick.Widgets.Core
  ( (<=>)
  , withAttr
  , vBox
  , str
  , hyperlink
  , modifyDefAttr
  )
import Brick.Util (on, fg)
import Brick.AttrMap (attrMap, AttrMap, attrName)

ui :: Widget n
ui =
    vBox [ str "This text uses the global default attribute."
         , withAttr (attrName "foundFull") $
           str "Specifying an attribute name means we look it up in the attribute tree."
         , withAttr (attrName "foundFgOnly") $
           str "When we find a value, we merge it with its parent in the attribute"
           <=> str "name tree all the way to the root (the global default)."
         , withAttr (attrName "missing") $
           str "A missing attribute name just resumes the search at its parent."
         , withAttr (attrName "general" <> attrName "specific") $
           str "In this way we build complete attribute values by using an inheritance scheme."
         , withAttr (attrName "foundFull") $
           str "You can override everything ..."
         , withAttr (attrName "foundFgOnly") $
           str "... or only what you want to change and inherit the rest."
         , str "Attribute names are assembled with the Monoid append operation to indicate"
         , str "hierarchy levels, e.g. attrName \"window\" <> attrName \"title\"."
         , str " "
         , withAttr (attrName "linked") $
           str "This text is hyperlinked in terminals that support hyperlinking."
         , str " "
         , hyperlink "http://www.google.com/" $
           str "This text is also hyperlinked in terminals that support hyperlinking."
         , str " "
         , modifyDefAttr (`withURL` "http://www.google.com/") $
           str "This text is hyperlinked by modifying the default attribute."
         ]

globalDefault :: Attr
globalDefault = white `on` blue

theMap :: AttrMap
theMap = attrMap globalDefault
    [ (attrName "foundFull",               white `on` green)
    , (attrName "foundFgOnly",             fg red)
    , (attrName "general",                 yellow `on` black)
    , (attrName "general" <> attrName "specific",
                                           fg cyan)
    , (attrName "linked",                  fg yellow `withURL` "http://www.google.com/")
    ]

app :: App () e ()
app =
    App { appDraw = const [ui]
        , appHandleEvent = resizeOrQuit
        , appStartEvent = return ()
        , appAttrMap = const theMap
        , appChooseCursor = neverShowCursor
        }

main :: IO ()
main = defaultMain app ()