{-# 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