Safe Haskell | None |
---|---|
Language | Haskell98 |
UI.NCurses
Contents
- data Curses a
- data Update a
- data Window
- data CursesException
- runCurses :: Curses a -> IO a
- defaultWindow :: Curses Window
- newWindow :: Integer -> Integer -> Integer -> Integer -> Curses Window
- closeWindow :: Window -> Curses ()
- cloneWindow :: Window -> Curses Window
- moveWindow :: Integer -> Integer -> Update ()
- windowPosition :: Update (Integer, Integer)
- resizeWindow :: Integer -> Integer -> Update ()
- windowSize :: Update (Integer, Integer)
- updateWindow :: Window -> Update a -> Curses a
- data OverlayMode
- overlay :: Window -> OverlayMode -> Update ()
- copyWindow :: Window -> OverlayMode -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Update ()
- data Pad
- newPad :: Integer -> Integer -> Curses Pad
- closePad :: Pad -> Curses ()
- updatePad :: Pad -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Update a -> Curses a
- moveCursor :: Integer -> Integer -> Update ()
- cursorPosition :: Update (Integer, Integer)
- getCursor :: Window -> Curses (Integer, Integer)
- render :: Curses ()
- setColor :: ColorID -> Update ()
- drawString :: String -> Update ()
- drawText :: Text -> Update ()
- drawGlyph :: Glyph -> Update ()
- drawBorder :: Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Maybe Glyph -> Update ()
- drawBox :: Maybe Glyph -> Maybe Glyph -> Update ()
- drawLineH :: Maybe Glyph -> Integer -> Update ()
- drawLineV :: Maybe Glyph -> Integer -> Update ()
- clear :: Update ()
- clearLine :: Update ()
- setBackground :: Glyph -> Update ()
- data Attribute
- setAttribute :: Attribute -> Bool -> Update ()
- setAttributes :: [Attribute] -> Update ()
- data Color
- maxColor :: Curses Integer
- data ColorID
- supportsColor :: Curses Bool
- canDefineColor :: Curses Bool
- defineColor :: Color -> Integer -> Integer -> Integer -> Curses ()
- queryColor :: Color -> Curses (Integer, Integer, Integer)
- defaultColorID :: ColorID
- newColorID :: Color -> Color -> Integer -> Curses ColorID
- setColorID :: Color -> Color -> ColorID -> Curses ()
- maxColorID :: Curses Integer
- data Glyph = Glyph {}
- glyphCornerUL :: Glyph
- glyphCornerLL :: Glyph
- glyphCornerUR :: Glyph
- glyphCornerLR :: Glyph
- glyphTeeL :: Glyph
- glyphTeeR :: Glyph
- glyphTeeB :: Glyph
- glyphTeeT :: Glyph
- glyphLineH :: Glyph
- glyphLineV :: Glyph
- glyphPlus :: Glyph
- glyphScan1 :: Glyph
- glyphScan9 :: Glyph
- glyphDiamond :: Glyph
- glyphStipple :: Glyph
- glyphDegree :: Glyph
- glyphPlusMinus :: Glyph
- glyphBullet :: Glyph
- glyphArrowL :: Glyph
- glyphArrowR :: Glyph
- glyphArrowD :: Glyph
- glyphArrowU :: Glyph
- glyphBoard :: Glyph
- glyphLantern :: Glyph
- glyphBlock :: Glyph
- glyphS3 :: Glyph
- glyphS7 :: Glyph
- glyphNE :: Glyph
- glyphLTE :: Glyph
- glyphGTE :: Glyph
- glyphPi :: Glyph
- glyphSterling :: Glyph
- data Event
- getEvent :: Window -> Maybe Integer -> Curses (Maybe Event)
- data Key
- = KeyUpArrow
- | KeyDownArrow
- | KeyLeftArrow
- | KeyRightArrow
- | KeyHome
- | KeyBackspace
- | KeyFunction Integer
- | KeyDeleteLine
- | KeyInsertLine
- | KeyDeleteCharacter
- | KeyInsertCharacter
- | KeyEIC
- | KeyClear
- | KeyEOS
- | KeyEOL
- | KeyScrollForward
- | KeyScrollBackward
- | KeyNextPage
- | KeyPreviousPage
- | KeySetTab
- | KeyClearTab
- | KeyClearAllTabs
- | KeyEnter
- | KeyPrint
- | KeyHomeDown
- | KeyA1
- | KeyA3
- | KeyB2
- | KeyC1
- | KeyC3
- | KeyBackTab
- | KeyBegin
- | KeyCancel
- | KeyClose
- | KeyCommand
- | KeyCopy
- | KeyCreate
- | KeyEnd
- | KeyExit
- | KeyFind
- | KeyHelp
- | KeyMark
- | KeyMessage
- | KeyMove
- | KeyNext
- | KeyOpen
- | KeyOptions
- | KeyPrevious
- | KeyRedo
- | KeyReference
- | KeyRefresh
- | KeyReplace
- | KeyRestart
- | KeyResume
- | KeySave
- | KeyShiftedBegin
- | KeyShiftedCancel
- | KeyShiftedCommand
- | KeyShiftedCopy
- | KeyShiftedCreate
- | KeyShiftedDeleteCharacter
- | KeyShiftedDeleteLine
- | KeySelect
- | KeyShiftedEnd
- | KeyShiftedEOL
- | KeyShiftedExit
- | KeyShiftedFind
- | KeyShiftedHelp
- | KeyShiftedHome
- | KeyShiftedInsertCharacter
- | KeyShiftedLeftArrow
- | KeyShiftedMessage
- | KeyShiftedMove
- | KeyShiftedNext
- | KeyShiftedOptions
- | KeyShiftedPrevious
- | KeyShiftedPrint
- | KeyShiftedRedo
- | KeyShiftedReplace
- | KeyShiftedRightArrow
- | KeyShiftedResume
- | KeyShiftedSave
- | KeyShiftedSuspend
- | KeyShiftedUndo
- | KeySuspend
- | KeyUndo
- data ButtonState
- data MouseState = MouseState {
- mouseCoordinates :: (Integer, Integer, Integer)
- mouseButtons :: [(Integer, ButtonState)]
- mouseAlt :: Bool
- mouseShift :: Bool
- mouseControl :: Bool
- data CursorMode
- setCursorMode :: CursorMode -> Curses CursorMode
- tryCurses :: Curses a -> Curses (Either CursesException a)
- catchCurses :: Curses a -> (CursesException -> Curses a) -> Curses a
- throwCurses :: CursesException -> Curses a
- setRaw :: Bool -> Curses ()
- setCBreak :: Bool -> Curses ()
- setEcho :: Bool -> Curses ()
- baudrate :: Curses Integer
- beep :: Curses ()
- flash :: Curses ()
- hasMouse :: Curses Bool
- enclosed :: Window -> Integer -> Integer -> Curses Bool
- screenSize :: Curses (Integer, Integer)
- setTouched :: Bool -> Update ()
- setRowsTouched :: Bool -> Integer -> Integer -> Update ()
- setKeypad :: Window -> Bool -> Curses ()
- resizeTerminal :: Integer -> Integer -> Curses ()
Primary types
A small wrapper around IO
, to ensure the ncurses
library is
initialized while running.
data CursesException Source
Instances
Initialization
runCurses :: Curses a -> IO a Source
Put the terminal in graphical mode, including enabling special keys, colors, and mouse events (if supported).
After the Curses
block has finished running, the terminal is reset
to text mode.
defaultWindow :: Curses Window Source
The default window created when ncurses
is initialized, also known
as stdscr
.
Window management
Create a new Window
, with the given dimensions. To create a
fullscreen window, use
.newWindow
0 0 0 0
When the window is no longer needed, call closeWindow
. Windows are not
garbage–collected, because there’s no way to know if
they’re still in use (as a background, or event source, etc).
closeWindow :: Window -> Curses () Source
Close a window, and free all resources associated with it. Once a window has been closed, it is no longer safe to use.
Note: this computation will not automatically clear the window from the screen.
cloneWindow :: Window -> Curses Window Source
Create a separate window, initialised with the state of an existing window.
moveWindow :: Integer -> Integer -> Update () Source
Moves the window to the given (row,column) coordinate.
windowPosition :: Update (Integer, Integer) Source
Returns the current (row, column) coordinates of the window.
resizeWindow :: Integer -> Integer -> Update () Source
Resizes the window to the given row and column dimensions.
windowSize :: Update (Integer, Integer) Source
updateWindow :: Window -> Update a -> Curses a Source
Apply a window update to the window. After all of an
application’s windows have been updated, call render
to update
the terminal’s contents.
Copying window content
data OverlayMode Source
Constructors
OverlayMerge | Overlay only non-blank characters. |
OverlayReplace | Overlay all characters, including blanks. |
Instances
overlay :: Window -> OverlayMode -> Update () Source
Overlay the entire content of another window onto this window.
The overlay mode specifies whether to copy blank characters.
Use copyWindow
if precise control over coordinates is required.
copyWindow :: Window -> OverlayMode -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Update () Source
Overlay a region of another window onto this window.
Use overlay
for copying the entire area of a window.
Virtual windows (pads)
closePad :: Pad -> Curses () Source
Close a pad, and free all resources associated with it. Once a pad has been closed, it is no longer safe to use.
updatePad :: Pad -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Update a -> Curses a Source
The cursor
Move the window’s cursor position to the given row and column.
cursorPosition :: Update (Integer, Integer) Source
Returns the current (row,column) coordinates of the cursor.
This is the same as getCursor
, but is usable within an Update.
getCursor :: Window -> Curses (Integer, Integer) Source
Return current cursor position as (row, column).
This is the same as cursorPosition
, but is usable outside
of an Update.
Drawing to the screen
Re–draw any portions of the screen which have changed since the last render.
setColor :: ColorID -> Update () Source
Set the current foreground and background colors. See newColorID
for how to create color IDs.
drawString :: String -> Update () Source
Add some text to the window, at the current cursor position.
Arguments
:: Maybe Glyph | Left edge |
-> Maybe Glyph | Right edge |
-> Maybe Glyph | Top edge |
-> Maybe Glyph | Bottom edge |
-> Maybe Glyph | Top left corner |
-> Maybe Glyph | Top right corner |
-> Maybe Glyph | Bottom left corner |
-> Maybe Glyph | Bottom right corner |
-> Update () |
Draw a border around the edge of the window. For any edge, passing
Nothing
means to use the default glyph.
drawBox :: Maybe Glyph -> Maybe Glyph -> Update () Source
drawBox v h = drawBorder v v h h Nothing Nothing Nothing Nothing
drawLineH :: Maybe Glyph -> Integer -> Update () Source
Draw a horizontal line from left to right, using the given glyph and maximum character count. The cursor position is not changed.
drawLineV :: Maybe Glyph -> Integer -> Update () Source
Draw a vertical line from top to bottom, using the given glyph and maximum character count. The cursor position is not changed.
Clear the current line starting from the current cursor position (inclusive) to the end of the line.
setBackground :: Glyph -> Update () Source
Set the window’s background glyph. The glyph will be drawn in place of any blank characters, and the glyph’s attributes will be combined with those of every character.
Attributes
Constructors
AttributeColor ColorID | A_COLOR |
AttributeStandout | A_STANDOUT |
AttributeUnderline | A_UNDERLINE |
AttributeReverse | A_REVERSE |
AttributeBlink | A_BLINK |
AttributeDim | A_DIM |
AttributeBold | A_BOLD |
AttributeAltCharset | A_ALTCHARSET |
AttributeInvisible | A_INVISIBLE |
AttributeProtect | A_PROTECT |
AttributeHorizontal | A_HORIZONTAL |
AttributeLeft | A_LEFT |
AttributeLow | A_LOW |
AttributeRight | A_RIGHT |
AttributeTop | A_TOP |
AttributeVertical | A_VERTICAL |
setAttribute :: Attribute -> Bool -> Update () Source
Set a single Attribute
on the current window. No other attributes
are modified.
setAttributes :: [Attribute] -> Update () Source
Set all Attribute
s at once on the current window. Any attributes not
included in the list will be unset.
Colors
Constructors
ColorBlack | |
ColorRed | |
ColorGreen | |
ColorYellow | |
ColorBlue | |
ColorMagenta | |
ColorCyan | |
ColorWhite | |
ColorDefault | An unspecified default terminal color, for terminals that support ISO/IEC 6429 escape sequences (or equivalent). This is most useful for terminals with translucent backgrounds. |
Color Int16 | A color outside of the standard COLOR_* enum space, for terminals that support more than eight colors. Color-related functions may fail if a Color is provided that cannot
be supported by the current terminal. Users are responsible for
checking |
A wrapper around Integer
to ensure clients don’t use an
uninitialized color in an attribute.
supportsColor :: Curses Bool Source
Check if the terminal supports color. If it doesn’t, alternative indicators (such as underlines or bold) should be used.
canDefineColor :: Curses Bool Source
Check if the terminal supports changing color defintiions.
Arguments
:: Color | |
-> Integer | Red (0 – 1000) |
-> Integer | Green (0 – 1000) |
-> Integer | Blue (0 – 1000) |
-> Curses () |
Change the definition of an existing color. Use canDefineColor
to
determine whether changing color values is possible.
queryColor :: Color -> Curses (Integer, Integer, Integer) Source
Query the current definition of the given color (see defineColor
).
The returned tuple is (red, green, blue), with values 0 – 1000.
defaultColorID :: ColorID Source
The default color ID
Arguments
:: Color | Foreground |
-> Color | Background |
-> Integer | A value n, such that
(0 < n ≤ |
-> Curses ColorID |
Assign a new ColorID
to some (foreground, background) color pair.
The user may pick which color ID is assigned, but it must be valid. Use
maxColorID
to determine how many colors the current terminal supports.
maxColorID :: Curses Integer Source
Get the maximum color ID supported by the current terminal
Glyphs
A glyph is a character, typically spacing, combined with a set of attributes.
Constructors
Glyph | |
Fields
|
VT100 drawing glyphs
Upper left corner
Lower left corner
Upper right corner
Lower right corner
Horizontal line
Vertical line
Scan line 1
Scan line 9
Diamond
Stipple, or checker board
Degree symbol
glyphPlusMinus :: Glyph Source
Plus/minus
Bullet
Teletype 5410v1 symbols
Arrow pointing left
Arrow pointing right
Arrow pointing down
Arrow pointing up
Board of squares
Lantern symbol
Solid square block
Other glyphs
UK pounds sterling symbol
Event handling
Get the next Event
from a given window.
If the timeout is Nothing
, getEvent
blocks until an event is received.
If the timeout is specified, getEvent
blocks for up to that many
milliseconds. If no event is received before timing out, getEvent
returns
Nothing
.
If the timeout is 0 or less, getEvent
will not block at all.
Keyboard events
Constructors
Mouse events
data ButtonState Source
Instances
data MouseState Source
Constructors
MouseState | |
Fields
|
Instances
Cursor mode
setCursorMode :: CursorMode -> Curses CursorMode Source
Set the current cursor mode to visible, invisible, or "very visible". The previous cursor mode is returned.
Error handling
tryCurses :: Curses a -> Curses (Either CursesException a) Source
Returns Left if a Curses exception occured in the given computation.
See try
for more details.
catchCurses :: Curses a -> (CursesException -> Curses a) -> Curses a Source
Handles errors in the given computation by passing them to a callback.
See catch
for more details.
throwCurses :: CursesException -> Curses a Source
Throws an exception from within Curses handling code. This is useful
for re-throwing errors from within a catchCurses
callback.
See throwIO
for more details.
misc
Check if some position is contained within the given Window
.
screenSize :: Curses (Integer, Integer) Source
Return (rows, columns) of current screen
setTouched :: Bool -> Update () Source
Set whether the entire window has been “touched”; touched characters are redrawn on the next refresh.
Set whether particular rows in the window have been “touched”.
resizeTerminal :: Integer -> Integer -> Curses () Source
Attempt to resize the terminal to the given number of lines and columns.