vgrep-0.2.0.0: src/Vgrep/Widget/Pager/Internal.hs
{-# LANGUAGE TemplateHaskell #-}
module Vgrep.Widget.Pager.Internal (
-- * Pager widget state
Pager (..)
-- * Lenses
, position
-- ** Auto-generated lenses
, column
, above
, visible
, highlighted
) where
import Control.Lens.Compat
import Data.IntMap.Strict (IntMap)
import Data.Sequence (Seq)
import Data.Text (Text)
import Vgrep.Ansi
-- | Keeps track of the lines of text to display, the current scroll
-- positions, and the set of highlighted line numbers.
data Pager = Pager
{ _column :: Int
-- ^ The current column offset for horizontal scrolling
, _highlighted :: IntMap AnsiFormatted
-- ^ Set of line numbers that are highlighted (i.e. they contain matches)
, _above :: Seq Text
-- ^ Zipper: Lines above the screen
, _visible :: Seq Text
-- ^ Zipper: Lines on screen and below
} deriving (Eq, Show)
makeLenses ''Pager
-- | The number of invisible lines above the screen
position :: Getter Pager Int
position = above . to length