-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Terminal emulator configurable in Haskell
--   
--   Please see README.md.
@package termonad
@version 0.2.1.0

module Termonad.Prelude

module Termonad.Gtk
objFromBuildUnsafe :: GObject o => Builder -> Text -> (ManagedPtr o -> o) -> IO o
appNew :: (HasCallStack, MonadIO m) => Maybe Text -> [ApplicationFlags] -> m Application

module Termonad.FocusList
data Focus
Focus :: {-# UNPACK #-} !Int -> Focus
NoFocus :: Focus
foldFocus :: b -> (Int -> b) -> Focus -> b
_Focus :: Prism' Focus Int
_NoFocus :: Prism' Focus ()
hasFocus :: Focus -> Bool
unsafeGetFocus :: Focus -> Int
data FocusList a
FocusList :: !Focus -> {-# UNPACK #-} !Int -> !IntMap a -> FocusList a
[focusListFocus] :: FocusList a -> !Focus
[focusListLen] :: FocusList a -> {-# UNPACK #-} !Int
[focusList] :: FocusList a -> !IntMap a
lensFocusListLen :: forall a_a1j1r. Lens' (FocusList a_a1j1r) Int
lensFocusListFocus :: forall a_a1j1r. Lens' (FocusList a_a1j1r) Focus
lensFocusList :: forall a_a1j1r a_a1pO9. Lens (FocusList a_a1j1r) (FocusList a_a1pO9) (IntMap a_a1j1r) (IntMap a_a1pO9)
debugFL :: Show a => FocusList a -> String
lensFocusListAt :: Int -> Lens' (FocusList a) (Maybe a)

-- | This is an invariant that the FocusList must always protect.
invariantFL :: FocusList a -> Bool

-- | Unsafely create a FocusList. This does not check that the focus
--   actually exists in the list.
--   
--   
--   >>> let fl = unsafeFLFromList (Focus 1) [0..2]
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = Focus 1, focusListLen = 3, focusList = fromList [(0,0),(1,1),(2,2)]}"
--   
--   
--   
--   >>> let fl = unsafeFLFromList NoFocus []
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = NoFocus, focusListLen = 0, focusList = fromList []}"
--   
unsafeFLFromList :: Focus -> [a] -> FocusList a
focusItemGetter :: Getter (FocusList a) (Maybe a)

-- | Safely create a FocusList from a list.
--   
--   
--   >>> flFromList (Focus 1) ["cat","dog","goat"]
--   Just (FocusList (Focus 1) ["cat","dog","goat"])
--   
--   
--   
--   >>> flFromList NoFocus []
--   Just (FocusList NoFocus [])
--   
--   
--   If the Focus is out of range for the list, then Nothing
--   will be returned.
--   
--   
--   >>> flFromList (Focus (-1)) ["cat","dog","goat"]
--   Nothing
--   
--   
--   
--   >>> flFromList (Focus 3) ["cat","dog","goat"]
--   Nothing
--   
--   
--   
--   >>> flFromList NoFocus ["cat","dog","goat"]
--   Nothing
--   
flFromList :: Focus -> [a] -> Maybe (FocusList a)

-- | Create a FocusList with a single element.
--   
--   
--   >>> singletonFL "hello"
--   FocusList (Focus 0) ["hello"]
--   
singletonFL :: a -> FocusList a

-- | Create an empty FocusList without a Focus.
--   
--   
--   >>> emptyFL
--   FocusList NoFocus []
--   
emptyFL :: FocusList a

-- | Return True if the FocusList is empty.
--   
--   
--   >>> isEmptyFL emptyFL
--   True
--   
--   
--   
--   >>> isEmptyFL $ singletonFL "hello"
--   False
--   
--   
--   Any FocusList with a Focus should never be empty.
isEmptyFL :: FocusList a -> Bool

-- | Append a value to the end of a FocusList.
--   
--   This can be thought of as a "snoc" operation.
--   
--   
--   >>> appendFL emptyFL "hello"
--   FocusList (Focus 0) ["hello"]
--   
--   
--   
--   >>> appendFL (singletonFL "hello") "bye"
--   FocusList (Focus 0) ["hello","bye"]
--   
--   
--   Appending a value to an empty FocusList is the same as using
--   singletonFL.
--   
--   
--   appendFL emptyFL a == singletonFL a
--   
appendFL :: FocusList a -> a -> FocusList a

-- | A combination of appendFL and setFocusFL.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "tree"]
--   
--   >>> appendSetFocusFL fl "pie"
--   FocusList (Focus 3) ["hello","bye","tree","pie"]
--   
--   
--   
--   (appendSetFocusFL fl a) ^. lensFocusListFocus /= fl ^. lensFocusListFocus
--   
appendSetFocusFL :: FocusList a -> a -> FocusList a

-- | Prepend a value to a FocusList.
--   
--   This can be thought of as a "cons" operation.
--   
--   
--   >>> prependFL "hello" emptyFL
--   FocusList (Focus 0) ["hello"]
--   
--   
--   The focus will be updated when prepending:
--   
--   
--   >>> prependFL "bye" (singletonFL "hello")
--   FocusList (Focus 1) ["bye","hello"]
--   
--   
--   Prepending to a FocusList will always update the Focus:
--   
--   
--   (fl ^. lensFocusListFocus) < (prependFL a fl ^. lensFocusListFocus)
--   
prependFL :: a -> FocusList a -> FocusList a

-- | Unsafely get the Focus from a FocusList. If the
--   Focus is NoFocus, this function returns error.
unsafeGetFLFocus :: FocusList a -> Int

-- | Unsafely get the value of the Focus from a FocusList. If
--   the Focus is NoFocus, this function returns
--   error.
unsafeGetFLFocusItem :: FocusList a -> a
getFLFocusItem :: FocusList a -> Maybe a

-- | Unsafely insert a new a in a FocusList. This sets the
--   Int value to a. The length of the FocusList
--   will be increased by 1. The FocusLists Focus is not
--   changed.
--   
--   If there is some value in the FocusList already at the
--   Int, then it will be overwritten. Also, the Int is not
--   checked to make sure it is above 0.
--   
--   This function is meant to be used after unsafeShiftUpFrom.
--   
--   
--   >>> let fl = unsafeShiftUpFrom 2 $ unsafeFLFromList (Focus 1) [0,1,200]
--   
--   >>> debugFL $ unsafeInsertNewFL 2 100 fl
--   "FocusList {focusListFocus = Focus 1, focusListLen = 4, focusList = fromList [(0,0),(1,1),(2,100),(3,200)]}"
--   
--   
--   
--   >>> let fl = unsafeFLFromList NoFocus []
--   
--   >>> debugFL $ unsafeInsertNewFL 0 100 fl
--   "FocusList {focusListFocus = NoFocus, focusListLen = 1, focusList = fromList [(0,100)]}"
--   
unsafeInsertNewFL :: Int -> a -> FocusList a -> FocusList a

-- | This unsafely shifts all values up in a FocusList starting at a
--   given index. It also updates the Focus of the FocusList
--   if it has been shifted. This does not change the length of the
--   FocusList.
--   
--   It does not check that the Int is greater than 0. It also does
--   not check that there is a Focus.
--   
--   
EXAMPLES
--   
--   
--   >>> let fl = unsafeShiftUpFrom 2 $ unsafeFLFromList (Focus 1) [0,1,200]
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = Focus 1, focusListLen = 3, focusList = fromList [(0,0),(1,1),(3,200)]}"
--   
--   
--   
--   >>> let fl = unsafeShiftUpFrom 1 $ unsafeFLFromList (Focus 1) [0,1,200]
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = Focus 2, focusListLen = 3, focusList = fromList [(0,0),(2,1),(3,200)]}"
--   
--   
--   
--   >>> let fl = unsafeShiftUpFrom 0 $ unsafeFLFromList (Focus 1) [0,1,200]
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = Focus 2, focusListLen = 3, focusList = fromList [(1,0),(2,1),(3,200)]}"
--   
--   
--   
--   >>> let fl = unsafeShiftUpFrom 0 $ unsafeFLFromList (Focus 1) [0,1,200]
--   
--   >>> debugFL fl
--   "FocusList {focusListFocus = Focus 2, focusListLen = 3, focusList = fromList [(1,0),(2,1),(3,200)]}"
--   
unsafeShiftUpFrom :: forall a. Int -> FocusList a -> FocusList a

-- | This is an unsafe lookup function. This assumes that the Int
--   exists in the IntMap.
unsafeLookup :: Int -> IntMap a -> a
lookupFL :: Int -> FocusList a -> Maybe a

-- | Insert a new value into the FocusList. The Focus of the
--   list is changed appropriately.
--   
--   
--   >>> insertFL 0 "hello" emptyFL
--   Just (FocusList (Focus 0) ["hello"])
--   
--   
--   
--   >>> insertFL 0 "hello" (singletonFL "bye")
--   Just (FocusList (Focus 1) ["hello","bye"])
--   
--   
--   
--   >>> insertFL 1 "hello" (singletonFL "bye")
--   Just (FocusList (Focus 0) ["bye","hello"])
--   
--   
--   This returns Nothing if the index at which to insert the new
--   value is either less than 0 or greater than the length of the list.
--   
--   
--   >>> insertFL 100 "hello" emptyFL
--   Nothing
--   
--   
--   
--   >>> insertFL 100 "bye" (singletonFL "hello")
--   Nothing
--   
--   
--   
--   >>> insertFL (-1) "bye" (singletonFL "hello")
--   Nothing
--   
insertFL :: Int -> a -> FocusList a -> Maybe (FocusList a)

-- | Unsafely remove a value from a FocusList. It effectively leaves
--   a hole inside the FocusList. It updates the length of the
--   FocusList.
--   
--   This function does not check that a value actually exists in the
--   FocusList. It also does not update the Focus.
--   
--   This function does update the length of the FocusList.
--   
--   
--   >>> debugFL $ unsafeRemove 1 $ unsafeFLFromList (Focus 0) [0..2]
--   "FocusList {focusListFocus = Focus 0, focusListLen = 2, focusList = fromList [(0,0),(2,2)]}"
--   
--   
--   
--   >>> debugFL $ unsafeRemove 0 $ unsafeFLFromList (Focus 0) [0..2]
--   "FocusList {focusListFocus = Focus 0, focusListLen = 2, focusList = fromList [(1,1),(2,2)]}"
--   
--   
--   Trying to remove the last element is completely safe (unless, of
--   course, it is the Focus):
--   
--   
--   >>> debugFL $ unsafeRemove 2 $ unsafeFLFromList (Focus 2) [0..2]
--   "FocusList {focusListFocus = Focus 2, focusListLen = 2, focusList = fromList [(0,0),(1,1)]}"
--   
--   
--   If this function is passed an empty FocusList, it will make the
--   length -1.
--   
--   
--   >>> debugFL $ unsafeRemove 0 emptyFL
--   "FocusList {focusListFocus = NoFocus, focusListLen = -1, focusList = fromList []}"
--   
unsafeRemove :: Int -> FocusList a -> FocusList a

-- | This shifts all the values down in a FocusList starting at a
--   given index. It does not change the Focus of the
--   FocusList. It does not change the length of the
--   FocusList.
--   
--   It does not check that shifting elements down will not overwrite other
--   elements. This function is meant to be called after
--   unsafeRemove.
--   
--   
--   >>> let fl = unsafeRemove 1 $ unsafeFLFromList (Focus 0) [0..2]
--   
--   >>> debugFL $ unsafeShiftDownFrom 1 fl
--   "FocusList {focusListFocus = Focus 0, focusListLen = 2, focusList = fromList [(0,0),(1,2)]}"
--   
--   
--   
--   >>> let fl = unsafeRemove 0 $ unsafeFLFromList (Focus 0) [0..2]
--   
--   >>> debugFL $ unsafeShiftDownFrom 0 fl
--   "FocusList {focusListFocus = Focus 0, focusListLen = 2, focusList = fromList [(0,1),(1,2)]}"
--   
--   
--   Trying to shift down from the last element after it has been removed
--   is a no-op:
--   
--   
--   >>> let fl = unsafeRemove 2 $ unsafeFLFromList (Focus 0) [0..2]
--   
--   >>> debugFL $ unsafeShiftDownFrom 2 fl
--   "FocusList {focusListFocus = Focus 0, focusListLen = 2, focusList = fromList [(0,0),(1,1)]}"
--   
unsafeShiftDownFrom :: forall a. Int -> FocusList a -> FocusList a

-- | Remove an element from a FocusList.
--   
--   If the element to remove is not the Focus, then update the
--   Focus accordingly.
--   
--   For example, if the Focus is on index 1, and we have removed
--   index 2, then the focus is not affected, so it is not changed.
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 1) ["cat","goat","dog","hello"]
--   
--   >>> removeFL 2 focusList
--   Just (FocusList (Focus 1) ["cat","goat","hello"])
--   
--   
--   If the Focus is on index 2 and we have removed index 1, then
--   the Focus will be moved back one element to set to index 1.
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 2) ["cat","goat","dog","hello"]
--   
--   >>> removeFL 1 focusList
--   Just (FocusList (Focus 1) ["cat","dog","hello"])
--   
--   
--   If we remove the Focus, then the next item is set to have the
--   Focus.
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 0) ["cat","goat","dog","hello"]
--   
--   >>> removeFL 0 focusList
--   Just (FocusList (Focus 0) ["goat","dog","hello"])
--   
--   
--   If the element to remove is the only element in the list, then the
--   Focus will be set to NoFocus.
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 0) ["hello"]
--   
--   >>> removeFL 0 focusList
--   Just (FocusList NoFocus [])
--   
--   
--   If the Int for the index to remove is either less than 0 or
--   greater then the length of the list, then Nothing is returned.
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 0) ["hello"]
--   
--   >>> removeFL (-1) focusList
--   Nothing
--   
--   
--   
--   >>> let focusList = unsafeFLFromList (Focus 1) ["hello","bye","cat"]
--   
--   >>> removeFL 3 focusList
--   Nothing
--   
--   
--   If the FocusList passed in is Empty, then Nothing
--   is returned.
--   
--   
--   >>> removeFL 0 emptyFL
--   Nothing
--   
removeFL :: Int -> FocusList a -> Maybe (FocusList a)

-- | Find the index of the first element in the FocusList.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "tree"]
--   
--   >>> indexOfFL "hello" fl
--   Just 0
--   
--   
--   If more than one element exists, then return the index of the first
--   one.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["dog", "cat", "cat"]
--   
--   >>> indexOfFL "cat" fl
--   Just 1
--   
--   
--   If the element doesn't exist, then return Nothing
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["foo", "bar", "baz"]
--   
--   >>> indexOfFL "hogehoge" fl
--   Nothing
--   
indexOfFL :: Eq a => a -> FocusList a -> Maybe Int

-- | Delete an element from a FocusList.
--   
--   
--   >>> let Just fl = flFromList (Focus 0) ["hello", "bye", "tree"]
--   
--   >>> deleteFL "bye" fl
--   FocusList (Focus 0) ["hello","tree"]
--   
--   
--   The focus will be updated if an item before it is deleted.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "tree"]
--   
--   >>> deleteFL "hello" fl
--   FocusList (Focus 0) ["bye","tree"]
--   
--   
--   If there are multiple matching elements in the FocusList,
--   remove them all.
--   
--   
--   >>> let Just fl = flFromList (Focus 0) ["hello", "bye", "bye"]
--   
--   >>> deleteFL "bye" fl
--   FocusList (Focus 0) ["hello"]
--   
--   
--   If there are no matching elements, return the original
--   FocusList.
--   
--   
--   >>> let Just fl = flFromList (Focus 2) ["hello", "good", "bye"]
--   
--   >>> deleteFL "frog" fl
--   FocusList (Focus 2) ["hello","good","bye"]
--   
deleteFL :: forall a. Eq a => a -> FocusList a -> FocusList a

-- | Set the Focus for a FocusList.
--   
--   This is just like updateFocusFL, but doesn't return the new
--   focused item.
--   
--   
--   setFocusFL i fl == fmap snd (updateFocusFL i fl)
--   
setFocusFL :: Int -> FocusList a -> Maybe (FocusList a)

-- | Update the Focus for a FocusList and get the new focused
--   element.
--   
--   
--   >>> updateFocusFL 1 =<< flFromList (Focus 2) ["hello","bye","dog","cat"]
--   Just ("bye",FocusList (Focus 1) ["hello","bye","dog","cat"])
--   
--   
--   If the FocusList is empty, then return Nothing.
--   
--   
--   >>> updateFocusFL 1 emptyFL
--   Nothing
--   
--   
--   If the new focus is less than 0, or greater than or equal to the
--   length of the FocusList, then return Nothing.
--   
--   
--   >>> updateFocusFL (-1) =<< flFromList (Focus 2) ["hello","bye","dog","cat"]
--   Nothing
--   
--   
--   
--   >>> updateFocusFL 4 =<< flFromList (Focus 2) ["hello","bye","dog","cat"]
--   Nothing
--   
updateFocusFL :: Int -> FocusList a -> Maybe (a, FocusList a)

-- | Find a value in a FocusList. Similar to
--   Data.List.find.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "tree"]
--   
--   >>> findFL (\_ a -> a == "hello") fl
--   Just (0,"hello")
--   
--   
--   This will only find the first value.
--   
--   
--   >>> let Just fl = flFromList (Focus 0) ["hello", "bye", "bye"]
--   
--   >>> findFL (\_ a -> a == "bye") fl
--   Just (1,"bye")
--   
--   
--   If no values match the comparison, this will return Nothing.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "parrot"]
--   
--   >>> findFL (\_ a -> a == "ball") fl
--   Nothing
--   
findFL :: (Int -> a -> Bool) -> FocusList a -> Maybe (Int, a)

-- | Move an existing item in a FocusList to a new index.
--   
--   The Focus gets updated appropriately when moving items.
--   
--   
--   >>> let Just fl = flFromList (Focus 1) ["hello", "bye", "parrot"]
--   
--   >>> moveFromToFL 0 1 fl
--   Just (FocusList (Focus 0) ["bye","hello","parrot"])
--   
--   
--   The Focus may not get updated if it is not involved.
--   
--   
--   >>> let Just fl = flFromList (Focus 0) ["hello", "bye", "parrot"]
--   
--   >>> moveFromToFL 1 2 fl
--   Just (FocusList (Focus 0) ["hello","parrot","bye"])
--   
--   
--   If the element with the Focus is moved, then the Focus
--   will be updated appropriately.
--   
--   
--   >>> let Just fl = flFromList (Focus 2) ["hello", "bye", "parrot"]
--   
--   >>> moveFromToFL 2 0 fl
--   Just (FocusList (Focus 0) ["parrot","hello","bye"])
--   
--   
--   If the index of the item to move is out bounds, then Nothing
--   will be returned.
--   
--   
--   >>> let Just fl = flFromList (Focus 2) ["hello", "bye", "parrot"]
--   
--   >>> moveFromToFL 3 0 fl
--   Nothing
--   
--   
--   If the new index is out of bounds, then Nothing wil be
--   returned.
--   
--   
--   >>> let Just fl = flFromList (Focus 2) ["hello", "bye", "parrot"]
--   
--   >>> moveFromToFL 1 (-1) fl
--   Nothing
--   
moveFromToFL :: Show a => Int -> Int -> FocusList a -> Maybe (FocusList a)
instance GHC.Base.Functor Termonad.FocusList.FocusList
instance Data.Foldable.Foldable Termonad.FocusList.FocusList
instance Data.Traversable.Traversable Termonad.FocusList.FocusList
instance Data.MonoTraversable.MonoFunctor (Termonad.FocusList.FocusList a)
instance Data.MonoTraversable.MonoFoldable (Termonad.FocusList.FocusList a)
instance Data.MonoTraversable.MonoTraversable (Termonad.FocusList.FocusList a)
instance Test.QuickCheck.Arbitrary.Arbitrary1 Termonad.FocusList.FocusList
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Termonad.FocusList.FocusList a)
instance Test.QuickCheck.Arbitrary.CoArbitrary a => Test.QuickCheck.Arbitrary.CoArbitrary (Termonad.FocusList.FocusList a)
instance GHC.Show.Show a => GHC.Show.Show (Termonad.FocusList.FocusList a)
instance GHC.Generics.Generic (Termonad.FocusList.FocusList a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Termonad.FocusList.FocusList a)
instance GHC.Show.Show Termonad.FocusList.Focus
instance GHC.Read.Read Termonad.FocusList.Focus
instance GHC.Generics.Generic Termonad.FocusList.Focus
instance GHC.Classes.Eq Termonad.FocusList.Focus
instance GHC.Classes.Ord Termonad.FocusList.Focus
instance Test.QuickCheck.Arbitrary.CoArbitrary Termonad.FocusList.Focus

module Termonad.Config
data FontConfig
FontConfig :: !Text -> !Int -> FontConfig
[fontFamily] :: FontConfig -> !Text
[fontSize] :: FontConfig -> !Int
lensFontSize :: Lens' FontConfig Int
lensFontFamily :: Lens' FontConfig Text
defaultFontConfig :: FontConfig
data ShowScrollbar
ShowScrollbarNever :: ShowScrollbar
ShowScrollbarAlways :: ShowScrollbar
ShowScrollbarIfNeeded :: ShowScrollbar
data TMConfig
TMConfig :: !FontConfig -> !ShowScrollbar -> !Colour Double -> !Integer -> TMConfig
[fontConfig] :: TMConfig -> !FontConfig
[showScrollbar] :: TMConfig -> !ShowScrollbar
[cursorColor] :: TMConfig -> !Colour Double
[scrollbackLen] :: TMConfig -> !Integer
lensShowScrollbar :: Lens' TMConfig ShowScrollbar
lensScrollbackLen :: Lens' TMConfig Integer
lensFontConfig :: Lens' TMConfig FontConfig
lensCursorColor :: Lens' TMConfig (Colour Double)
defaultTMConfig :: TMConfig
instance GHC.Show.Show Termonad.Config.TMConfig
instance GHC.Classes.Eq Termonad.Config.TMConfig
instance GHC.Show.Show Termonad.Config.ShowScrollbar
instance GHC.Classes.Eq Termonad.Config.ShowScrollbar
instance GHC.Show.Show Termonad.Config.FontConfig
instance GHC.Classes.Eq Termonad.Config.FontConfig

module Termonad.Types
data TMTerm
TMTerm :: !Terminal -> !Int -> !Unique -> TMTerm
[term] :: TMTerm -> !Terminal
[pid] :: TMTerm -> !Int
[unique] :: TMTerm -> !Unique
lensUnique :: Lens' TMTerm Unique
lensTerm :: Lens' TMTerm Terminal
lensPid :: Lens' TMTerm Int
data TMNotebookTab
TMNotebookTab :: !ScrolledWindow -> !TMTerm -> !Label -> TMNotebookTab
[tmNotebookTabTermContainer] :: TMNotebookTab -> !ScrolledWindow
[tmNotebookTabTerm] :: TMNotebookTab -> !TMTerm
[tmNotebookTabLabel] :: TMNotebookTab -> !Label
lensTMNotebookTabTermContainer :: Lens' TMNotebookTab ScrolledWindow
lensTMNotebookTabTerm :: Lens' TMNotebookTab TMTerm
lensTMNotebookTabLabel :: Lens' TMNotebookTab Label
data TMNotebook
TMNotebook :: !Notebook -> !FocusList TMNotebookTab -> TMNotebook
[tmNotebook] :: TMNotebook -> !Notebook
[tmNotebookTabs] :: TMNotebook -> !FocusList TMNotebookTab
lensTMNotebookTabs :: Lens' TMNotebook (FocusList TMNotebookTab)
lensTMNotebook :: Lens' TMNotebook Notebook
data UserRequestedExit
UserRequestedExit :: UserRequestedExit
UserDidNotRequestExit :: UserRequestedExit
data TMState'
TMState :: !Application -> !ApplicationWindow -> !TMNotebook -> !FontDescription -> !TMConfig -> !UserRequestedExit -> TMState'
[tmStateApp] :: TMState' -> !Application
[tmStateAppWin] :: TMState' -> !ApplicationWindow
[tmStateNotebook] :: TMState' -> !TMNotebook
[tmStateFontDesc] :: TMState' -> !FontDescription
[tmStateConfig] :: TMState' -> !TMConfig

-- | This signifies whether or not the user has requested that Termonad
--   exit by either closing all terminals or clicking the exit button. If
--   so, tmStateUserReqExit should have a value of
--   UserRequestedExit. However, if the window manager requested
--   Termonad to exit (probably through the user trying to close Termonad
--   through their window manager), then this will be set to
--   UserDidNotRequestExit.
[tmStateUserReqExit] :: TMState' -> !UserRequestedExit
lensTMStateUserReqExit :: Lens' TMState' UserRequestedExit
lensTMStateNotebook :: Lens' TMState' TMNotebook
lensTMStateFontDesc :: Lens' TMState' FontDescription
lensTMStateConfig :: Lens' TMState' TMConfig
lensTMStateAppWin :: Lens' TMState' ApplicationWindow
lensTMStateApp :: Lens' TMState' Application
type TMState = MVar TMState'
createTMTerm :: Terminal -> Int -> Unique -> TMTerm
newTMTerm :: Terminal -> Int -> IO TMTerm
createTMNotebookTab :: Label -> ScrolledWindow -> TMTerm -> TMNotebookTab
createTMNotebook :: Notebook -> FocusList TMNotebookTab -> TMNotebook
createEmptyTMNotebook :: Notebook -> TMNotebook
newTMState :: TMConfig -> Application -> ApplicationWindow -> TMNotebook -> FontDescription -> IO TMState
newEmptyTMState :: TMConfig -> Application -> ApplicationWindow -> Notebook -> FontDescription -> IO TMState
newTMStateSingleTerm :: TMConfig -> Application -> ApplicationWindow -> Notebook -> Label -> ScrolledWindow -> Terminal -> Int -> FontDescription -> IO TMState
traceShowMTMState :: TMState -> IO ()
pTraceShowMTMState :: TMState -> IO ()
getFocusedTermFromState :: TMState -> IO (Maybe Terminal)
setUserRequestedExit :: TMState -> IO ()
getUserRequestedExit :: TMState -> IO UserRequestedExit
instance GHC.Classes.Eq Termonad.Types.TMTerm
instance GHC.Classes.Eq Termonad.Types.TMNotebookTab
instance GHC.Show.Show Termonad.Types.UserRequestedExit
instance GHC.Classes.Eq Termonad.Types.UserRequestedExit
instance GHC.Show.Show Termonad.Types.TMState'
instance GHC.Show.Show Termonad.Types.TMNotebook
instance GHC.Show.Show Termonad.Types.TMNotebookTab
instance GHC.Show.Show Termonad.Types.TMTerm

module Termonad.Term
focusTerm :: Int -> TMState -> IO ()
altNumSwitchTerm :: Int -> TMState -> IO ()
termExitFocused :: TMState -> IO ()
termExitWithConfirmation :: TMNotebookTab -> TMState -> IO ()
termExit :: TMNotebookTab -> TMState -> IO ()
relabelTabs :: TMState -> IO ()
relabelTab :: Notebook -> Label -> ScrolledWindow -> Terminal -> IO ()
showScrollbarToPolicy :: ShowScrollbar -> PolicyType
createScrolledWin :: TMState -> IO ScrolledWindow
createNotebookTabLabel :: IO (Box, Label, Button)
getCursorColor :: TMConfig -> IO RGBA

-- | TODO: This should probably be implemented in an external package,
--   since it is a generally useful utility.
--   
--   It should also be implemented for windows and osx.
cwdOfPid :: Int -> IO (Maybe Text)
createTerm :: (TMState -> EventKey -> IO Bool) -> TMState -> IO TMTerm

module Termonad.Keys
showKeys :: EventKey -> IO Bool
data Key
Key :: Word32 -> Set ModifierType -> Key
[keyVal] :: Key -> Word32
[keyMods] :: Key -> Set ModifierType
toKey :: Word32 -> Set ModifierType -> Key
keyMap :: Map Key (TMState -> IO Bool)
stopProp :: (TMState -> IO a) -> TMState -> IO Bool
removeStrangeModifiers :: Key -> Key
handleKeyPress :: TMState -> EventKey -> IO Bool
instance GHC.Show.Show Termonad.Keys.Key
instance GHC.Classes.Ord Termonad.Keys.Key
instance GHC.Classes.Eq Termonad.Keys.Key

module Termonad.XML
interfaceDoc :: Document
interfaceText :: Text
menuDoc :: Document
menuText :: Text
aboutDoc :: Document
aboutText :: Text
closeTabDoc :: Document
closeTabText :: Text

module Termonad.App
setupScreenStyle :: IO ()
createFontDesc :: TMConfig -> IO FontDescription
compareScrolledWinAndTab :: ScrolledWindow -> a -> TMNotebookTab -> Bool
updateFLTabPos :: TMState -> Int -> Int -> IO ()
exitWithConfirmation :: TMState -> IO ()
exitWithConfirmationDialog :: TMState -> IO ResponseType
quit :: TMState -> IO ()
setupTermonad :: TMConfig -> Application -> ApplicationWindow -> Builder -> IO ()
appActivate :: TMConfig -> Application -> IO ()
showAboutDialog :: Application -> IO ()
appStartup :: Application -> IO ()
start :: TMConfig -> IO ()
defaultMain :: TMConfig -> IO ()

module Termonad
defaultMain :: TMConfig -> IO ()
