content: {-# LANGUAGE TemplateHaskell #-}
  module Vgrep.Environment
      ( Environment (..)
      , Viewport (..)
  
      -- * Auto-generated Lenses
      , config
      , viewport
      , vpHeight
      , vpWidth
  
      -- * Convenience Lenses
      , viewportWidth
      , viewportHeight
  
      -- * Re-exports
      , module Vgrep.Environment.Config
      ) where
  
  import Control.Lens.Compat
  
  import Vgrep.Environment.Config
  
  
  -- | The bounds (width and height) of a display viewport.
  data Viewport = Viewport { _vpWidth :: Int, _vpHeight :: Int }
      deriving (Eq, Show)
  
  makeLenses ''Viewport
  
  
  -- | 'Vgrep.Type.VgrepT' actions can read from the environment.
  data Environment = Env
      { _config   :: Config
      -- ^ External configuration (colors, editor executable, …)
  
      , _viewport :: Viewport
      -- ^ The bounds (width and height) of the display viewport where the
      -- 'Vgrep.App.App' or the current 'Vgrep.Widget.Widget' is displayed
      } deriving (Eq, Show)
  
  makeLenses ''Environment
  
  
  viewportHeight, viewportWidth :: Lens' Environment Int
  viewportHeight = viewport . vpHeight
  viewportWidth  = viewport . vpWidth
  