---------------------------------------------------------------------------- -- | -- Module : Rasa.Ext -- Copyright : (C) 2016 Chris Penner -- License : MIT -- Maintainer : Chris Penner -- -- This module contains the public API for building an extension for Rasa. It -- re-exports the parts of rasa that are public API for creating extensions. -- -- There are two main things that an extension can do, either react -- to editor events, or expose useful actions and/or state for other extensions -- to use. -- -- Whether performing its own actions or being used by a different extension -- an extension will want to define some 'Action's to perform. Actions -- can operate over buffers or even perform IO and comprise the main way in which -- extensons do what they need to do. Read more here: 'Action', 'BufAction'. -- -- To sum it all up, Here's an example of a simple logging extension that -- simply writes each keypress to a file. -- -- > logKeypress :: Keypress -> Action () -- > logKeypress (Keypress char _) = liftIO $ appendFile "logs" ("You pressed " ++ [char] ++ "\n") -- > logKeypress _ = return () -- > -- > logger :: Action () -- > logger = do -- > liftIO $ writeFile "logs" "==Logs==\n" -- > onKeypress logKeypress -- > onExit $ liftIO $ appendFile "logs" "==Done==" -- -- Check out this tutorial on building extensions, it's also just a great way to learn -- how the editor works: . ---------------------------------------------------------------------------- module Rasa.Ext ( -- * Editor Actions getBuffer -- * Managing Buffers , addBuffer , nextBufRef , prevBufRef , getBufRefs -- * Working with Buffers , Buffer , HasBuffer(..) , BufRef , text , getText , getRange , getBufRef -- * Actions over Buffers , BufAction , bufDo , bufDo_ , buffersDo , buffersDo_ -- * Working with Text , overRange , replaceRange , deleteRange , insertAt , sizeOf , getLineRange , getBufExt , setBufExt , overBufExt -- * Events , dispatchBufEvent , addBufListener , addBufListener_ , removeBufListener -- * Built-in Events , Keypress(..) , Mod(..) , dispatchKeypress , BufAdded(..) , BufTextChanged(..) -- * Built-in Event Listeners , beforeEveryRender , beforeEveryRender_ , onEveryRender , onEveryRender_ , afterEveryRender , afterEveryRender_ , onBufAdded , onBufAdded_ , onEveryNewBuffer , onEveryNewBuffer_ , onBufTextChanged , onKeypress -- * Ranges , Range(..) , CrdRange , Coord , Coord'(..) , Offset(..) , Span(..) , overRow , overCol , coordRow , coordCol , overBoth , combineSpans , asCoord , clampCoord , clampRange , rStart , rEnd , sizeOfR , afterC , beforeC , moveRange , moveRangeByN , moveCursorByN -- * Styles -- | A common representation for text styling , fg , bg , flair , Color(..) , Flair(..) , Style(..) , Styles , addStyleProvider , getStyles , styleText -- * Useful Utilities , asText , asString , asLines , clamp , cropToViewport -- * Common Types/Interfaces -- | These exist to help unify the interfaces of many different extensions without -- requiring them to depend upon each other. Use them liberally in your own extensions. , Width , Height , ScrollPos , RenderInfo(..) , Renderable(..) , module Eve ) where import Eve import Rasa.Internal.BufActions import Rasa.Internal.Buffer import Rasa.Internal.Events import Rasa.Internal.Listeners import Rasa.Internal.Range import Rasa.Internal.Styles import Rasa.Internal.Text import Rasa.Internal.Utility