-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A declarative terminal user interface library -- -- Write terminal applications painlessly with brick! You write an -- event handler and a drawing function and the library does the rest. -- --
-- module Main where -- -- import Brick -- -- ui :: Widget () -- ui = str "Hello, world!" -- -- main :: IO () -- main = simpleMain ui ---- -- To get started, see: -- --
-- let n = attrName "parent" <> attrName "child" ---- -- Attribute names are mapped to attributes, but some attributes may be -- partial (specify only a foreground or background color). When -- attribute name lookups occur, the attribute corresponding to a more -- specific name ('parent <> child' as above) is sucessively merged -- with the parent attribute (parent as above) all the way to -- the "root" of the attribute map, the map's default attribute. In this -- way, more specific attributes inherit what they don't specify from -- more general attributes in the same hierarchy. This allows more -- modularity and less repetition in specifying how elements of your user -- interface take on different attributes. module Brick.AttrMap -- | An attribute map which maps AttrName values to Attr -- values. data AttrMap -- | An attribute name. Attribute names are hierarchical; use -- mappend (<>) to assemble them. Hierachy in an -- attribute name is used to represent increasing levels of specificity -- in referring to the attribute you want to use for a visual element, -- with names to the left being general and names to the right being more -- specific. For example: -- --
-- "window" <> "border" -- "window" <> "title" -- "header" <> "clock" <> "seconds" --data AttrName -- | Create an attribute map. attrMap :: Attr -> [(AttrName, Attr)] -> AttrMap -- | Create an attribute map in which all lookups map to the same -- attribute. forceAttrMap :: Attr -> AttrMap -- | Create an attribute name from a string. attrName :: String -> AttrName -- | Look up the specified attribute name in the map. Map lookups proceed -- as follows. If the attribute map is forcing all lookups to a specific -- attribute, that attribute is returned. If the attribute name is empty, -- the map's default attribute is returned. If the attribute name is -- non-empty, very subsequence of names from the specified name are used -- to perform a lookup, and the results are combined as in -- mergeWithDefault, with more specific results taking precedence -- over less specific ones. -- -- For example: -- --
-- attrMapLookup ("foo" <> "bar") (attrMap a []) == a
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", fg red)]) == red `on` blue
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", red on cyan)]) == red `on` cyan
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", fg red), ("foo", bg cyan)]) == red `on` cyan
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo", fg red)]) == red `on` blue
--
attrMapLookup :: AttrName -> AttrMap -> Attr
-- | Set the default attribute value in an attribute map.
setDefault :: Attr -> AttrMap -> AttrMap
-- | Insert a set of attribute mappings to an attribute map.
applyAttrMappings :: [(AttrName, Attr)] -> AttrMap -> AttrMap
-- | Given an attribute and a map, merge the attribute with the map's
-- default attribute. If the map is forcing all lookups to a specific
-- attribute, the forced attribute is returned without merging it with
-- the one specified here. Otherwise the attribute given here is merged
-- with the attribute map's default attribute in that any aspect of the
-- specified attribute that is not provided falls back to the map
-- default. For example,
--
-- -- mergeWithDefault (fg blue) $ attrMap (bg red) [] ---- -- returns -- --
-- blue `on` red --mergeWithDefault :: Attr -> AttrMap -> Attr -- | Update an attribute map such that a lookup of ontoName -- returns the attribute value specified by fromName. This is -- useful for composite widgets with specific attribute names mapping -- those names to the sub-widget's expected name when calling that -- sub-widget's rendering function. See the ProgressBarDemo for an -- example usage, and overrideAttr for an alternate syntax. mapAttrName :: AttrName -> AttrName -> AttrMap -> AttrMap -- | Map several attributes to return the value associated with an -- alternate name. Applies mapAttrName across a list of mappings. mapAttrNames :: [(AttrName, AttrName)] -> AttrMap -> AttrMap instance GHC.Show.Show Brick.AttrMap.AttrMap instance GHC.Classes.Ord Brick.AttrMap.AttrName instance GHC.Classes.Eq Brick.AttrMap.AttrName instance GHC.Show.Show Brick.AttrMap.AttrName instance GHC.Base.Monoid Brick.AttrMap.AttrName instance Data.String.IsString Brick.AttrMap.AttrName -- | Basic types used by this library. module Brick.Types -- | The type of widgets. data Widget n Widget :: Size -> Size -> RenderM n (Result n) -> Widget n -- | This widget's horizontal growth policy [hSize] :: Widget n -> Size -- | This widget's vertical growth policy [vSize] :: Widget n -> Size -- | This widget's rendering function [render] :: Widget n -> RenderM n (Result n) -- | A terminal screen location. data Location Location :: (Int, Int) -> Location -- | (Column, Row) [loc] :: Location -> (Int, Int) locL :: Lens' Location (Int, Int) -- | The class of types that behave like terminal locations. class TerminalLocation a -- | Get the column out of the value locationColumnL :: TerminalLocation a => Lens' a Int locationColumn :: TerminalLocation a => a -> Int -- | Get the row out of the value locationRowL :: TerminalLocation a => Lens' a Int locationRow :: TerminalLocation a => a -> Int -- | A cursor location. These are returned by the rendering process. data CursorLocation n CursorLocation :: !Location -> !(Maybe n) -> CursorLocation n -- | The location [cursorLocation] :: CursorLocation n -> !Location -- | The name of the widget associated with the location [cursorLocationName] :: CursorLocation n -> !(Maybe n) cursorLocationL :: forall n_aqfI. Lens' (CursorLocation n_aqfI) Location cursorLocationNameL :: forall n_aqfI n_aqJm. Lens (CursorLocation n_aqfI) (CursorLocation n_aqJm) (Maybe n_aqfI) (Maybe n_aqJm) -- | Describes the state of a viewport as it appears as its most recent -- rendering. data Viewport VP :: Int -> Int -> DisplayRegion -> Viewport -- | The column offset of left side of the viewport. [_vpLeft] :: Viewport -> Int -- | The row offset of the top of the viewport. [_vpTop] :: Viewport -> Int -- | The size of the viewport. [_vpSize] :: Viewport -> DisplayRegion -- | The type of viewports that indicates the direction(s) in which a -- viewport is scrollable. data ViewportType -- | Viewports of this type are scrollable only vertically. Vertical :: ViewportType -- | Viewports of this type are scrollable only horizontally. Horizontal :: ViewportType -- | Viewports of this type are scrollable vertically and horizontally. Both :: ViewportType vpSize :: Lens' Viewport DisplayRegion vpTop :: Lens' Viewport Int vpLeft :: Lens' Viewport Int -- | The monad in which event handlers run. Although it may be tempting to -- dig into the reader value yourself, just use lookupViewport. newtype EventM n a EventM :: ReaderT (EventRO n) (StateT (EventState n) IO) a -> EventM n a [runEventM] :: EventM n a -> ReaderT (EventRO n) (StateT (EventState n) IO) a -- | The type of actions to take upon completion of an event handler. data Next a -- | The type of events. data BrickEvent n e -- | The event was a Vty event. VtyEvent :: Event -> BrickEvent n e -- | The event was an application event. AppEvent :: e -> BrickEvent n e -- | A mouse-down event on the specified region was received. The -- n value is the resource name of the clicked widget (see -- clickable). MouseDown :: n -> Button -> [Modifier] -> Location -> BrickEvent n e -- | A mouse-up event on the specified region was received. The n -- value is the resource name of the clicked widget (see -- clickable). MouseUp :: n -> (Maybe Button) -> Location -> BrickEvent n e -- | A convenience function for handling events intended for values that -- are targets of lenses in your application state. This function obtains -- the target value of the specified lens, invokes handleEvent -- on it, and stores the resulting transformed value back in the state -- using the lens. handleEventLensed :: a -> Lens' a b -> (e -> b -> EventM n b) -> e -> EventM n a -- | The type of the rendering monad. This monad is used by the library's -- rendering routines to manage rendering state and communicate rendering -- parameters to widgets' rendering functions. type RenderM n a = ReaderT Context (State (RenderState n)) a -- | Get the current rendering context. getContext :: RenderM n Context -- | The rendering context. This tells widgets how to render: how much -- space they have in which to render, which attribute they should use to -- render, which bordering style should be used, and the attribute map -- available for rendering. data Context -- | The rendering context's current drawing attribute. attrL :: forall r. Getting r Context Attr availWidthL :: Lens' Context Int availHeightL :: Lens' Context Int ctxAttrMapL :: Lens' Context AttrMap ctxAttrNameL :: Lens' Context AttrName ctxBorderStyleL :: Lens' Context BorderStyle -- | The type of result returned by a widget's rendering function. The -- result provides the image, cursor positions, and visibility requests -- that resulted from the rendering process. data Result n Result :: Image -> [CursorLocation n] -> [VisibilityRequest] -> [Extent n] -> Result n -- | The final rendered image for a widget [image] :: Result n -> Image -- | The list of reported cursor positions for the application to choose -- from [cursors] :: Result n -> [CursorLocation n] -- | The list of visibility requests made by widgets rendered while -- rendering this one (used by viewports) [visibilityRequests] :: Result n -> [VisibilityRequest] [extents] :: Result n -> [Extent n] emptyResult :: Result n -- | Given an attribute name, obtain the attribute for the attribute name -- by consulting the context's attribute map. lookupAttrName :: AttrName -> RenderM n Attr -- | An extent of a named area: its size, location, and origin. data Extent n Extent :: n -> Location -> (Int, Int) -> Location -> Extent n [extentName] :: Extent n -> n [extentUpperLeft] :: Extent n -> Location [extentSize] :: Extent n -> (Int, Int) [extentOffset] :: Extent n -> Location imageL :: forall n_aqeD. Lens' (Result n_aqeD) Image cursorsL :: forall n_aqeD. Lens' (Result n_aqeD) [CursorLocation n_aqeD] visibilityRequestsL :: forall n_aqeD. Lens' (Result n_aqeD) [VisibilityRequest] extentsL :: forall n_aqeD. Lens' (Result n_aqeD) [Extent n_aqeD] data VisibilityRequest VR :: Location -> DisplayRegion -> VisibilityRequest [vrPosition] :: VisibilityRequest -> Location [vrSize] :: VisibilityRequest -> DisplayRegion vrPositionL :: Lens' VisibilityRequest Location vrSizeL :: Lens' VisibilityRequest DisplayRegion -- | A template haskell function to build lenses for a record type. This -- function differs from the makeLenses function in that it does -- not require the record fields to be prefixed with underscores and it -- adds an L suffix to lens names to make it clear that they are -- lenses. suffixLenses :: Name -> DecsQ -- | Widget growth policies. These policies communicate to layout -- algorithms how a widget uses space when being rendered. These policies -- influence rendering order and space allocation in the box layout -- algorithm. data Size -- | Fixed widgets take up the same amount of space no matter how much they -- are given (non-greedy). Fixed :: Size -- | Greedy widgets take up all the space they are given. Greedy :: Size -- | The type of padding. data Padding -- | Pad by the specified number of rows or columns. Pad :: Int -> Padding -- | Pad up to the number of available rows or columns. Max :: Padding -- | Scrolling direction. data Direction -- | Up/left Up :: Direction -- | Down/right Down :: Direction instance Brick.Types.Internal.TerminalLocation (Brick.Types.Internal.CursorLocation n) instance GHC.Classes.Ord Brick.Types.Size instance GHC.Classes.Eq Brick.Types.Size instance GHC.Show.Show Brick.Types.Size instance Control.Monad.IO.Class.MonadIO (Brick.Types.EventM n) instance GHC.Base.Monad (Brick.Types.EventM n) instance GHC.Base.Applicative (Brick.Types.EventM n) instance GHC.Base.Functor (Brick.Types.EventM n) -- | This module provides an API for turning "markup" values into widgets. -- This module uses the Data.Text.Markup interface in this package -- to assign attributes to substrings in a text string; to manipulate -- markup using (for example) syntax highlighters, see that module. module Brick.Markup -- | Markup with metadata type a assigned to each character. data Markup a -- | Build a widget from markup. markup :: (Eq a, GetAttr a) => Markup a -> Widget n -- | Build a piece of markup from text with an assigned attribute name. -- When the markup is rendered, the attribute name will be looked up in -- the rendering context's AttrMap to determine the attribute to -- use for this piece of text. (@?) :: Text -> AttrName -> Markup AttrName -- | A type class for types that provide access to an attribute in the -- rendering monad. You probably won't need to instance this. class GetAttr a -- | Where to get the attribute for this attribute metadata. getAttr :: GetAttr a => a -> RenderM n Attr instance Brick.Markup.GetAttr Graphics.Vty.Attributes.Attr instance Brick.Markup.GetAttr Brick.AttrMap.AttrName -- | Utility functions. module Brick.Util -- | Given a minimum value and a maximum value, clamp a value to that range -- (values less than the minimum map to the minimum and values greater -- than the maximum map to the maximum). -- --
-- >>> clamp 1 10 11 -- 10 -- -- >>> clamp 1 10 2 -- 2 -- -- >>> clamp 5 10 1 -- 5 --clamp :: (Ord a) => a -> a -> a -> a -- | Build an attribute from a foreground color and a background color. -- Intended to be used infix. on :: Color -> Color -> Attr -- | Create an attribute from the specified foreground color (the -- background color is the "default"). fg :: Color -> Attr -- | Create an attribute from the specified background color (the -- background color is the "default"). bg :: Color -> Attr -- | Add a Location offset to the specified CursorLocation. clOffset :: CursorLocation n -> Location -> CursorLocation n module Brick.Main -- | The library application abstraction. Your application's operations are -- represented here and passed to one of the various main functions in -- this module. An application is in terms of an application state type -- s, an application event type e, and a resource name -- type n. In the simplest case e is unused (left -- polymorphic or set to '()'), but you may define your own event type -- and use customMain to provide custom events. The state type is -- the type of application state to be provided by you and iteratively -- modified by event handlers. The resource name type is the type of -- names you can assign to rendering resources such as viewports and -- cursor locations. data App s e n App :: (s -> [Widget n]) -> (s -> [CursorLocation n] -> Maybe (CursorLocation n)) -> (s -> BrickEvent n e -> EventM n (Next s)) -> (s -> EventM n s) -> (s -> AttrMap) -> App s e n -- | This function turns your application state into a list of widget -- layers. The layers are listed topmost first. [appDraw] :: App s e n -> s -> [Widget n] -- | This function chooses which of the zero or more cursor locations -- reported by the rendering process should be selected as the one to use -- to place the cursor. If this returns Nothing, no cursor is -- placed. The rationale here is that many widgets may request a cursor -- placement but your application state is what you probably want to use -- to decide which one wins. [appChooseCursor] :: App s e n -> s -> [CursorLocation n] -> Maybe (CursorLocation n) -- | This function takes the current application state and an event and -- returns an action to be taken and a corresponding transformed -- application state. Possible options are continue, -- suspendAndResume, and halt. [appHandleEvent] :: App s e n -> s -> BrickEvent n e -> EventM n (Next s) -- | This function gets called once just prior to the first drawing of your -- application. Here is where you can make initial scrolling requests, -- for example. [appStartEvent] :: App s e n -> s -> EventM n s -- | The attribute map that should be used during rendering. [appAttrMap] :: App s e n -> s -> AttrMap -- | The default main entry point which takes an application and an initial -- state and returns the final state returned by a halt operation. defaultMain :: (Ord n) => App s e n -> s -> IO s -- | The custom event loop entry point to use when the simpler ones don't -- permit enough control. customMain :: (Ord n) => IO Vty -> Maybe (BChan e) -> App s e n -> s -> IO s -- | A simple main entry point which takes a widget and renders it. This -- event loop terminates when the user presses any key, but terminal -- resize events cause redraws. simpleMain :: (Ord n) => Widget n -> IO () -- | An event-handling function which continues execution of the event loop -- only when resize events occur; all other types of events trigger a -- halt. This is a convenience function useful as an -- appHandleEvent value for simple applications using the -- Event type that do not need to get more sophisticated user -- input. resizeOrQuit :: s -> BrickEvent n e -> EventM n (Next s) -- | Continue running the event loop with the specified application state. continue :: s -> EventM n (Next s) -- | Halt the event loop and return the specified application state as the -- final state value. halt :: s -> EventM n (Next s) -- | Suspend the event loop, save the terminal state, and run the specified -- action. When it returns an application state value, restore the -- terminal state, redraw the application from the new state, and resume -- the event loop. suspendAndResume :: IO s -> EventM n (Next s) -- | Given a viewport name, get the viewport's size and offset information -- from the most recent rendering. Returns Nothing if no such -- state could be found, either because the name was invalid or because -- no rendering has occurred (e.g. in an appStartEvent handler). lookupViewport :: (Ord n) => n -> EventM n (Maybe Viewport) -- | Given a resource name, get the most recent rendering extent for the -- name (if any). lookupExtent :: (Eq n) => n -> EventM n (Maybe (Extent n)) -- | Given a mouse click location, return the extents intersected by the -- click. The returned extents are sorted such that the first extent in -- the list is the most specific extent and the last extent is the most -- generic (top-level). So if two extents A and B both intersected the -- mouse click but A contains B, then they would be returned [B, A]. findClickedExtents :: (Int, Int) -> EventM n [Extent n] -- | Did the specified mouse coordinates (column, row) intersect the -- specified extent? clickedExtent :: (Int, Int) -> Extent n -> Bool -- | Get the Vty handle currently in use. getVtyHandle :: EventM n (Maybe Vty) -- | Build a viewport scroller for the viewport with the specified name. viewportScroll :: n -> ViewportScroll n -- | A viewport scrolling handle for managing the scroll state of -- viewports. data ViewportScroll n -- | Scroll the viewport vertically by the specified number of rows or -- columns depending on the orientation of the viewport. vScrollBy :: ViewportScroll n -> Int -> EventM n () -- | Scroll the viewport vertically by one page in the specified direction. vScrollPage :: ViewportScroll n -> Direction -> EventM n () -- | Scroll vertically to the beginning of the viewport. vScrollToBeginning :: ViewportScroll n -> EventM n () -- | Scroll vertically to the end of the viewport. vScrollToEnd :: ViewportScroll n -> EventM n () -- | Scroll the viewport horizontally by the specified number of rows or -- columns depending on the orientation of the viewport. hScrollBy :: ViewportScroll n -> Int -> EventM n () -- | Scroll the viewport horizontally by one page in the specified -- direction. hScrollPage :: ViewportScroll n -> Direction -> EventM n () -- | Scroll horizontally to the beginning of the viewport. hScrollToBeginning :: ViewportScroll n -> EventM n () -- | Scroll horizontally to the end of the viewport. hScrollToEnd :: ViewportScroll n -> EventM n () -- | Set the top row offset of the viewport. setTop :: ViewportScroll n -> Int -> EventM n () -- | Set the left column offset of the viewport. setLeft :: ViewportScroll n -> Int -> EventM n () -- | Ignore all requested cursor positions returned by the rendering -- process. This is a convenience function useful as an -- appChooseCursor value when a simple application has no need to -- position the cursor. neverShowCursor :: s -> [CursorLocation n] -> Maybe (CursorLocation n) -- | Always show the first cursor, if any, returned by the rendering -- process. This is a convenience function useful as an -- appChooseCursor value when a simple program has zero or more -- widgets that advertise a cursor position. showFirstCursor :: s -> [CursorLocation n] -> Maybe (CursorLocation n) -- | Show the cursor with the specified resource name, if such a cursor -- location has been reported. showCursorNamed :: (Eq n) => n -> [CursorLocation n] -> Maybe (CursorLocation n) -- | Invalidate the rendering cache entry with the specified resource name. invalidateCacheEntry :: n -> EventM n () -- | Invalidate the entire rendering cache. invalidateCache :: EventM n () -- | This module provides the core widget combinators and rendering -- routines. Everything this library does is in terms of these basic -- primitives. module Brick.Widgets.Core -- | The class of text types that have widths measured in terminal columns. -- NEVER use length etc. to measure the length of a string if you -- need to compute how much screen space it will occupy; always use -- textWidth. class TextWidth a textWidth :: TextWidth a => a -> Int -- | The empty widget. emptyWidget :: Widget n -- | Build a widget directly from a raw Vty image. raw :: Image -> Widget n -- | Build a widget from a Text value. Behaves the same as -- str when the input contains multiple lines. txt :: Text -> Widget n -- | Make a widget from text, but wrap the words in the input's lines at -- the available width. txtWrap :: Text -> Widget n -- | Build a widget from a String. Breaks newlines up and space-pads -- short lines out to the length of the longest line. str :: String -> Widget n -- | Make a widget from a string, but wrap the words in the input's lines -- at the available width. strWrap :: String -> Widget n -- | Fill all available space with the specified character. Grows both -- horizontally and vertically. fill :: Char -> Widget n -- | Pad the specified widget on the left. If max padding is used, this -- grows greedily horizontally; otherwise it defers to the padded widget. padLeft :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the right. If max padding is used, this -- grows greedily horizontally; otherwise it defers to the padded widget. padRight :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the top. If max padding is used, this -- grows greedily vertically; otherwise it defers to the padded widget. padTop :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the bottom. If max padding is used, this -- grows greedily vertically; otherwise it defers to the padded widget. padBottom :: Padding -> Widget n -> Widget n -- | Pad a widget on the left and right. Defers to the padded widget for -- growth policy. padLeftRight :: Int -> Widget n -> Widget n -- | Pad a widget on the top and bottom. Defers to the padded widget for -- growth policy. padTopBottom :: Int -> Widget n -> Widget n -- | Pad a widget on all sides. Defers to the padded widget for growth -- policy. padAll :: Int -> Widget n -> Widget n -- | Vertical box layout: put the specified widgets one above the other in -- the specified order. Defers growth policies to the growth policies of -- both widgets. This operator is a binary version of vBox. (<=>) :: Widget n -> Widget n -> Widget n -- | Horizontal box layout: put the specified widgets next to each other in -- the specified order. Defers growth policies to the growth policies of -- both widgets. This operator is a binary version of hBox. (<+>) :: Widget n -> Widget n -> Widget n -- | Horizontal box layout: put the specified widgets next to each other in -- the specified order (leftmost first). Defers growth policies to the -- growth policies of the contained widgets (if any are greedy, so is the -- box). hBox :: [Widget n] -> Widget n -- | Vertical box layout: put the specified widgets one above the other in -- the specified order (uppermost first). Defers growth policies to the -- growth policies of the contained widgets (if any are greedy, so is the -- box). vBox :: [Widget n] -> Widget n -- | Limit the space available to the specified widget to the specified -- number of columns. This is important for constraining the horizontal -- growth of otherwise-greedy widgets. This is non-greedy horizontally -- and defers to the limited widget vertically. hLimit :: Int -> Widget n -> Widget n -- | Limit the space available to the specified widget to the specified -- number of rows. This is important for constraining the vertical growth -- of otherwise-greedy widgets. This is non-greedy vertically and defers -- to the limited widget horizontally. vLimit :: Int -> Widget n -> Widget n -- | Update the attribute map while rendering the specified widget: set its -- new default attribute to the one that we get by looking up the -- specified attribute name in the map. withDefAttr :: AttrName -> Widget n -> Widget n -- | When drawing the specified widget, set the current attribute used for -- drawing to the one with the specified name. Note that the widget may -- use further calls to withAttr to override this; if you really -- want to prevent that, use forceAttr. Attributes used this way -- still get merged hierarchically and still fall back to the attribute -- map's default attribute. If you want to change the default attribute, -- use withDefAttr. withAttr :: AttrName -> Widget n -> Widget n -- | When rendering the specified widget, force all attribute lookups in -- the attribute map to use the value currently assigned to the specified -- attribute name. forceAttr :: AttrName -> Widget n -> Widget n -- | Override the lookup of targetName to return the attribute -- value associated with fromName when rendering the specified -- widget. See also mapAttrName. overrideAttr :: AttrName -> AttrName -> Widget n -> Widget n -- | When rendering the specified widget, update the attribute map with the -- specified transformation. updateAttrMap :: (AttrMap -> AttrMap) -> Widget n -> Widget n -- | When rendering the specified widget, use the specified border style -- for any border rendering. withBorderStyle :: BorderStyle -> Widget n -> Widget n -- | When rendering the specified widget, also register a cursor -- positioning request using the specified name and location. showCursor :: n -> Location -> Widget n -> Widget n -- | The class of types that store interface element names. class Named a n -- | Get the name of the specified value. getName :: Named a n => a -> n -- | Translate the specified widget by the specified offset amount. Defers -- to the translated widget for growth policy. translateBy :: Location -> Widget n -> Widget n -- | Crop the specified widget on the left by the specified number of -- columns. Defers to the cropped widget for growth policy. cropLeftBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the right by the specified number of -- columns. Defers to the cropped widget for growth policy. cropRightBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the top by the specified number of rows. -- Defers to the cropped widget for growth policy. cropTopBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the bottom by the specified number of -- rows. Defers to the cropped widget for growth policy. cropBottomBy :: Int -> Widget n -> Widget n -- | Render the specified widget and record its rendering extent using the -- specified name (see also lookupExtent). reportExtent :: n -> Widget n -> Widget n -- | Request mouse click events on the specified widget. clickable :: n -> Widget n -> Widget n -- | Render the specified widget in a named viewport with the specified -- type. This permits widgets to be scrolled without being -- scrolling-aware. To make the most use of viewports, the specified -- widget should use the visible combinator to make a "visibility -- request". This viewport combinator will then translate the resulting -- rendering to make the requested region visible. In addition, the -- EventM monad provides primitives to scroll viewports created by -- this function if visible is not what you want. -- -- If a viewport receives more than one visibility request, then the -- visibility requests are merged with the inner visibility request -- taking preference. If a viewport receives more than one scrolling -- request from EventM, all are honored in the order in which they -- are received. viewport :: (Ord n, Show n) => n -> ViewportType -> Widget n -> Widget n -- | Request that the specified widget be made visible when it is rendered -- inside a viewport. This permits widgets (whose sizes and positions -- cannot be known due to being embedded in arbitrary layouts) to make a -- request for a parent viewport to locate them and scroll enough to put -- them in view. This, together with viewport, is what makes the -- text editor and list widgets possible without making them deal with -- the details of scrolling state management. -- -- This does nothing if not rendered in a viewport. visible :: Widget n -> Widget n -- | Similar to visible, request that a region (with the specified -- Location as its origin and DisplayRegion as its size) be -- made visible when it is rendered inside a viewport. The -- Location is relative to the specified widget's upper-left -- corner of (0, 0). -- -- This does nothing if not rendered in a viewport. visibleRegion :: Location -> DisplayRegion -> Widget n -> Widget n -- | Given a name, obtain the viewport for that name by consulting the -- viewport map in the rendering monad. NOTE! Some care must be taken -- when calling this function, since it only returns useful values after -- the viewport in question has been rendered. If you call this function -- during rendering before a viewport has been rendered, you may get -- nothing or you may get a stale version of the viewport. This is -- because viewports are updated during rendering and the one you are -- interested in may not have been rendered yet. So if you want to use -- this, be sure you know what you are doing. unsafeLookupViewport :: (Ord n) => n -> RenderM n (Maybe Viewport) -- | Render the specified widget. If the widget has an entry in the -- rendering cache using the specified name as the cache key, use the -- rendered version from the cache instead. If not, render the widget and -- update the cache. -- -- See also invalidateCacheEntry. cached :: (Ord n) => n -> Widget n -> Widget n -- | Add an offset to all cursor locations, visbility requests, and extents -- in the specified rendering result. This function is critical for -- maintaining correctness in the rendering results as they are processed -- successively by box layouts and other wrapping combinators, since -- calls to this function result in converting from widget-local -- coordinates to (ultimately) terminal-global ones so they can be used -- by other combinators. You should call this any time you render -- something and then translate it or otherwise offset it from its -- original origin. addResultOffset :: Location -> Result n -> Result n -- | After rendering the specified widget, crop its result image to the -- dimensions in the rendering context. cropToContext :: Widget n -> Widget n instance Brick.Widgets.Core.TextWidth Data.Text.Internal.Text instance Data.Foldable.Foldable f => Brick.Widgets.Core.TextWidth (f GHC.Types.Char) -- | This module provides a type and functions for handling focus rings of -- values. -- -- This interface is experimental. module Brick.Focus -- | A focus ring containing a sequence of resource names to focus and a -- currently-focused name. data FocusRing n -- | Construct a focus ring from the list of resource names. focusRing :: [n] -> FocusRing n -- | Advance focus to the next value in the ring. focusNext :: FocusRing n -> FocusRing n -- | Advance focus to the previous value in the ring. focusPrev :: FocusRing n -> FocusRing n -- | Get the currently-focused resource name from the ring. If the ring is -- emtpy, return Nothing. focusGetCurrent :: FocusRing n -> Maybe n -- | Cursor selection convenience function for use as an -- appChooseCursor value. focusRingCursor :: (Eq n) => (a -> FocusRing n) -> a -> [CursorLocation n] -> Maybe (CursorLocation n) -- | This function is a convenience function to look up a widget state -- value's resource name in a focus ring and set its focus setting -- according to the focus ring's state. This function determines whether -- a given widget state value is the focus of the ring and passes the -- resulting boolean to a rendering function, along with the state value -- (a), to produce whatever comes next (b). -- -- Focus-aware widgets have rendering functions that should be usable -- with this combinator; see List and Edit. withFocusRing :: (Eq n, Named a n) => FocusRing n -> (Bool -> a -> b) -> a -> b -- | Modify the internal circular list structure of a focus ring directly. -- This function permits modification of the circular list using the rich -- Data.CircularList API. focusRingModify :: (CList n -> CList n) -> FocusRing n -> FocusRing n -- | This module provides combinators for centering other widgets. module Brick.Widgets.Center -- | Center the specified widget horizontally. Consumes all available -- horizontal space. hCenter :: Widget n -> Widget n -- | Center the specified widget horizontally. Consumes all available -- horizontal space. Uses the specified character to fill in the space to -- either side of the centered widget (defaults to space). hCenterWith :: Maybe Char -> Widget n -> Widget n -- | Center the specified widget horizontally using a Vty image -- translation. Consumes all available horizontal space. Unlike hCenter, -- this does not fill the surrounding space so it is suitable for use as -- a layer. Layers underneath this widget will be visible in regions -- surrounding the centered widget. hCenterLayer :: Widget n -> Widget n -- | Center a widget vertically. Consumes all vertical space. vCenter :: Widget n -> Widget n -- | Center a widget vertically. Consumes all vertical space. Uses the -- specified character to fill in the space above and below the centered -- widget (defaults to space). vCenterWith :: Maybe Char -> Widget n -> Widget n -- | Center the specified widget vertically using a Vty image translation. -- Consumes all available vertical space. Unlike vCenter, this does not -- fill the surrounding space so it is suitable for use as a layer. -- Layers underneath this widget will be visible in regions surrounding -- the centered widget. vCenterLayer :: Widget n -> Widget n -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. center :: Widget n -> Widget n -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. Uses the specified character -- to fill in the space around the centered widget (defaults to space). centerWith :: Maybe Char -> Widget n -> Widget n -- | Center a widget both vertically and horizontally using a Vty image -- translation. Consumes all available vertical and horizontal space. -- Unlike center, this does not fill in the surrounding space with a -- character so it is usable as a layer. Any widget underneath this one -- will be visible in the region surrounding the centered widget. centerLayer :: Widget n -> Widget n -- | Center the widget horizontally and vertically about the specified -- origin. centerAbout :: Location -> Widget n -> Widget n -- | This module provides border widgets: vertical borders, horizontal -- borders, and a box border wrapper widget. All functions in this module -- use the rendering context's active BorderStyle; to change the -- BorderStyle, use withBorderStyle. module Brick.Widgets.Border -- | Put a border around the specified widget. border :: Widget n -> Widget n -- | Put a border around the specified widget with the specified label -- widget placed in the middle of the top horizontal border. borderWithLabel :: Widget n -> Widget n -> Widget n -- | A horizontal border. Fills all horizontal space. hBorder :: Widget n -- | A horizontal border with a label placed in the center of the border. -- Fills all horizontal space. hBorderWithLabel :: Widget n -> Widget n -- | A vertical border. Fills all vertical space. vBorder :: Widget n -- | Draw the specified border element using the active border style using -- borderAttr. borderElem :: (BorderStyle -> Char) -> Widget n -- | The top-level border attribute name. borderAttr :: AttrName -- | The vertical border attribute name. vBorderAttr :: AttrName -- | The horizontal border attribute name. hBorderAttr :: AttrName -- | The attribute used for horizontal border labels. hBorderLabelAttr :: AttrName -- | The attribute used for border box top-left corners. tlCornerAttr :: AttrName -- | The attribute used for border box top-right corners. trCornerAttr :: AttrName -- | The attribute used for border box bottom-left corners. blCornerAttr :: AttrName -- | The attribute used for border box bottom-right corners. brCornerAttr :: AttrName -- | This module provides a simple dialog widget. You get to pick the -- dialog title, if any, as well as its body and buttons. module Brick.Widgets.Dialog -- | Dialogs present a window with a title (optional), a body, and buttons -- (optional). Dialog buttons are labeled with strings and map to values -- of type a, which you choose. -- -- Dialogs handle the following events by default with handleDialogEvent: -- --