-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A declarative terminal user interface library -- @package brick @version 0.2 -- | This module provides styles for borders as used in terminal -- applications. Your mileage may vary on some of the fancier styles due -- to varying support for some border characters in the fonts your users -- may be using. Because of this, we provide the ascii style in -- addition to the Unicode styles. The unicode style is also a -- safe bet. -- -- To use these in your widgets, see withBorderStyle. By default, -- widgets rendered without a specified border style use unicode -- via the Default instance provided by BorderStyle. module Brick.Widgets.Border.Style -- | A border style for use in any widget that needs to render borders in a -- consistent style. data BorderStyle BorderStyle :: Char -> Char -> Char -> Char -> Char -> Char -> Char -> Char -> Char -> Char -> Char -> BorderStyle -- | Top-left corner character bsCornerTL :: BorderStyle -> Char -- | Top-right corner character bsCornerTR :: BorderStyle -> Char -- | Bottom-right corner character bsCornerBR :: BorderStyle -> Char -- | Bottom-left corner character bsCornerBL :: BorderStyle -> Char -- | Full intersection (cross) bsIntersectFull :: BorderStyle -> Char -- | Left side of a horizontal border intersecting a vertical one bsIntersectL :: BorderStyle -> Char -- | Right side of a horizontal border intersecting a vertical one bsIntersectR :: BorderStyle -> Char -- | Top of a vertical border intersecting a horizontal one bsIntersectT :: BorderStyle -> Char -- | Bottom of a vertical border intersecting a horizontal one bsIntersectB :: BorderStyle -> Char -- | Horizontal border character bsHorizontal :: BorderStyle -> Char -- | Vertical border character bsVertical :: BorderStyle -> Char -- | Make a border style using the specified character everywhere. borderStyleFromChar :: Char -> BorderStyle -- | An ASCII border style which will work in any terminal. ascii :: BorderStyle -- | A unicode border style with real corner and intersection characters. unicode :: BorderStyle -- | A unicode border style in a bold typeface. unicodeBold :: BorderStyle -- | A unicode border style with rounded corners. unicodeRounded :: BorderStyle instance Show BorderStyle instance Read BorderStyle instance Default BorderStyle -- | This module provides an API for "marking up" text with arbitrary -- values. A piece of markup can then be converted to a list of pairs -- representing the sequences of characters assigned the same markup -- value. -- -- This interface is experimental. Don't use this for your full-file -- syntax highlighter just yet! module Data.Text.Markup -- | Markup with metadata type a assigned to each character. data Markup a -- | Convert markup to a list of pairs in which each pair contains the -- longest subsequence of characters having the same metadata. markupToList :: Eq a => Markup a -> [(Text, a)] -- | Set the metadata for a range of character positions in a piece of -- markup. This is useful for, e.g., syntax highlighting. markupSet :: Eq a => (Int, Int) -> a -> Markup a -> Markup a -- | Convert a list of text and metadata pairs into markup. fromList :: [(Text, a)] -> Markup a -- | Build markup from text with the default metadata. fromText :: Default a => Text -> Markup a -- | Extract the text from markup, discarding the markup metadata. toText :: Eq a => Markup a -> Text -- | Build a piece of markup; assign the specified metadata to every -- character in the specified text. (@@) :: Text -> a -> Markup a instance Show a => Show (Markup a) instance Default a => IsString (Markup a) instance Monoid (Markup a) -- | This module provides types and functions for managing an attribute map -- which maps attribute names (AttrName) to attributes -- (Attr). This module is designed to be used with the -- OverloadedStrings language extension to permit easy -- construction of AttrName values and you should also use -- mappend (<>) to combine names. -- -- Attribute maps work by mapping hierarchical attribute names to -- attributes and inheriting parent names' attributes when child names -- specify partial attributes. Hierarchical names are created with -- mappend: -- --
-- 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 instance Show AttrName instance Eq AttrName instance Ord AttrName instance Show AttrMap instance Default AttrMap instance IsString AttrName instance Monoid AttrName instance Default 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 -> Location -> CursorLocation -- | Basic types used by this library. module Brick.Types -- | The type of widgets. data Widget Widget :: Size -> Size -> RenderM Result -> Widget -- | This widget's horizontal growth policy hSize :: Widget -> Size -- | This widget's vertical growth policy vSize :: Widget -> Size -- | This widget's rendering function render :: Widget -> RenderM Result -- | A terminal screen location. data Location Location :: (Int, Int) -> Location -- | (Column, Row) loc :: Location -> (Int, Int) locL :: Iso' Location (Int, Int) -- | The class of types that behave like terminal locations. class TerminalLocation a columnL :: TerminalLocation a => Lens' a Int column :: TerminalLocation a => a -> Int rowL :: TerminalLocation a => Lens' a Int row :: TerminalLocation a => a -> Int -- | A cursor location. These are returned by the rendering process. data CursorLocation CursorLocation :: !Location -> !(Maybe Name) -> CursorLocation -- | The location cursorLocation :: CursorLocation -> !Location -- | The name of the widget associated with the location cursorLocationName :: CursorLocation -> !(Maybe Name) cursorLocationL :: Lens' CursorLocation Location cursorLocationNameL :: Lens' CursorLocation (Maybe Name) -- | 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. type EventM a = ReaderT (Map Name Viewport) (StateT EventState IO) a -- | The type of actions to take upon completion of an event handler. data Next a -- | The class of types that provide some basic event-handling. class HandleEvent a handleEvent :: HandleEvent a => Event -> a -> EventM a -- | 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 :: HandleEvent b => a -> Lens' a b -> Event -> EventM 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 a = ReaderT Context (State RenderState) a -- | Get the current rendering context. getContext :: RenderM 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 bordring style should be used, and the attribute map -- available for rendering. data Context -- | The rendering context's current drawing attribute. attrL :: (Contravariant f, Functor f) => (Attr -> f Attr) -> Context -> f Context 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 Result :: Image -> [CursorLocation] -> [VisibilityRequest] -> Result -- | The final rendered image for a widget image :: Result -> Image -- | The list of reported cursor positions for the application to choose -- from cursors :: Result -> [CursorLocation] -- | The list of visibility requests made by widgets rendered while -- rendering this one (used by viewports) visibilityRequests :: Result -> [VisibilityRequest] -- | Given an attribute name, obtain the attribute for the attribute name -- by consulting the context's attribute map. lookupAttrName :: AttrName -> RenderM Attr imageL :: Lens' Result Image cursorsL :: Lens' Result [CursorLocation] visibilityRequestsL :: Lens' Result [VisibilityRequest] 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 -- | Names of things. Used to name cursor locations, widgets, and -- viewports. newtype Name Name :: String -> Name instance TerminalLocation CursorLocation instance Show Size instance Eq Size instance Ord Size instance Show Result instance Default Result -- | This module provides a type and functions for handling focus rings of -- widgets. Note that this interface is merely provided for managing the -- focus state for a sequence of widget names; it does not do anything -- beyond keep track of that. -- -- This interface is experimental. module Brick.Focus -- | A focus ring containing a sequence of widget names to focus and a -- currently-focused widget name. data FocusRing -- | Construct a focus ring from the list of names. focusRing :: [Name] -> FocusRing -- | Advance focus to the next widget in the ring. focusNext :: FocusRing -> FocusRing -- | Advance focus to the previous widget in the ring. focusPrev :: FocusRing -> FocusRing -- | Get the currently-focused widget name from the ring. If the ring is -- emtpy, return Nothing. focusGetCurrent :: FocusRing -> Maybe Name -- | Cursor selection convenience function for use as an -- appChooseCursor value. focusRingCursor :: (a -> FocusRing) -> a -> [CursorLocation] -> Maybe CursorLocation -- | 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 empty widget. emptyWidget :: Widget -- | Build a widget directly from a raw Vty image. raw :: Image -> Widget -- | Build a widget from a one-line Text value. Behaves the same as -- str. txt :: Text -> Widget -- | 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 -- | Fill all available space with the specified character. Grows both -- horizontally and vertically. fill :: Char -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | Pad a widget on the left and right. Defers to the padded widget for -- growth policy. padLeftRight :: Int -> Widget -> Widget -- | Pad a widget on the top and bottom. Defers to the padded widget for -- growth policy. padTopBottom :: Int -> Widget -> Widget -- | Pad a widget on all sides. Defers to the padded widget for growth -- policy. padAll :: Int -> Widget -> Widget -- | 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 -> Widget -> Widget -- | 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 -> Widget -> Widget -- | 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] -> Widget -- | 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] -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | When rendering the specified widget, update the attribute map with the -- specified transformation. updateAttrMap :: (AttrMap -> AttrMap) -> Widget -> Widget -- | When rendering the specified widget, use the specified border style -- for any border rendering. withBorderStyle :: BorderStyle -> Widget -> Widget -- | When rendering the specified widget, also register a cursor -- positioning request using the specified name and location. showCursor :: Name -> Location -> Widget -> Widget -- | Translate the specified widget by the specified offset amount. Defers -- to the translated width for growth policy. translateBy :: Location -> Widget -> Widget -- | Crop the specified widget on the left by the specified number of -- columns. Defers to the translated width for growth policy. cropLeftBy :: Int -> Widget -> Widget -- | Crop the specified widget on the right by the specified number of -- columns. Defers to the translated width for growth policy. cropRightBy :: Int -> Widget -> Widget -- | Crop the specified widget on the top by the specified number of rows. -- Defers to the translated width for growth policy. cropTopBy :: Int -> Widget -> Widget -- | Crop the specified widget on the bottom by the specified number of -- rows. Defers to the translated width for growth policy. cropBottomBy :: Int -> Widget -> Widget -- | 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, only the -- first is honored. If a viewport receives more than one scrolling -- request from EventM, all are honored in the order in which they -- are received. viewport :: Name -> ViewportType -> Widget -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | Add an offset to all cursor locations and visbility requests 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 -> Result -- | After rendering the specified widget, crop its result image to the -- dimensions in the rendering context. cropToContext :: Widget -> Widget -- | 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 -- | 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 getAttr :: GetAttr a => a -> RenderM Attr instance GetAttr AttrName instance GetAttr Attr -- | This module provides combinators for centering other widgets. module Brick.Widgets.Center -- | Center the specified widget horizontally. Consumes all available -- horizontal space. hCenter :: Widget -> Widget -- | 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 -> Widget -- | Center a widget vertically. Consumes all vertical space. vCenter :: Widget -> Widget -- | 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 -> Widget -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. center :: Widget -> Widget -- | 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 -> Widget -- | Center the widget horizontally and vertically about the specified -- origin. centerAbout :: Location -> Widget -> Widget -- | 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 -> Widget -- | Put a border around the specified widget with the specified label -- widget placed in the middle of the top horizontal border. borderWithLabel :: Widget -> Widget -> Widget -- | A horizontal border. Fills all horizontal space. hBorder :: Widget -- | A horizontal border with a label placed in the center of the border. -- Fills all horizontal space. hBorderWithLabel :: Widget -> Widget -- | A vertical border. Fills all vertical space. vBorder :: Widget -- | Draw the specified border element using the active border style using -- borderAttr. borderElem :: (BorderStyle -> Char) -> Widget -- | 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). They provide a HandleEvent instance that knows -- about Tab and Shift-Tab for changing which button is active. Dialog -- buttons are labeled with strings and map to values of type a, -- which you choose. -- -- Dialogs handle the following events by default: -- --