ncurses-0.2.16: Modernised bindings to GNU ncurses

Safe HaskellNone
LanguageHaskell98

UI.NCurses

Contents

Synopsis

Primary types

data Curses a Source #

A small wrapper around IO, to ensure the ncurses library is initialized while running.

Instances

Monad Curses Source # 

Methods

(>>=) :: Curses a -> (a -> Curses b) -> Curses b #

(>>) :: Curses a -> Curses b -> Curses b #

return :: a -> Curses a #

fail :: String -> Curses a #

Functor Curses Source # 

Methods

fmap :: (a -> b) -> Curses a -> Curses b #

(<$) :: a -> Curses b -> Curses a #

MonadFix Curses Source # 

Methods

mfix :: (a -> Curses a) -> Curses a #

Applicative Curses Source # 

Methods

pure :: a -> Curses a #

(<*>) :: Curses (a -> b) -> Curses a -> Curses b #

(*>) :: Curses a -> Curses b -> Curses b #

(<*) :: Curses a -> Curses b -> Curses a #

MonadIO Curses Source # 

Methods

liftIO :: IO a -> Curses a #

data Update a Source #

Instances

Monad Update Source # 

Methods

(>>=) :: Update a -> (a -> Update b) -> Update b #

(>>) :: Update a -> Update b -> Update b #

return :: a -> Update a #

fail :: String -> Update a #

Functor Update Source # 

Methods

fmap :: (a -> b) -> Update a -> Update b #

(<$) :: a -> Update b -> Update a #

MonadFix Update Source # 

Methods

mfix :: (a -> Update a) -> Update a #

Applicative Update Source # 

Methods

pure :: a -> Update a #

(<*>) :: Update (a -> b) -> Update a -> Update b #

(*>) :: Update a -> Update b -> Update b #

(<*) :: Update a -> Update b -> Update a #

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

newWindow Source #

Arguments

:: Integer

Rows

-> Integer

Columns

-> Integer

Begin Y

-> Integer

Begin X

-> Curses Window 

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.

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.

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)

data Pad Source #

A Pad is a Window that is not associated with the screen.

newPad Source #

Arguments

:: Integer

Rows

-> Integer

Columns

-> Curses Pad 

Create a new Pad with the given dimensions.

When the pad is no longer needed, call closePad. Pads are not garbage–collected, because there’s no way to know if they’re still in use.

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.

The cursor

moveCursor Source #

Arguments

:: Integer

Row

-> Integer

Column

-> Update () 

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

render :: Curses () Source #

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.

drawText :: Text -> Update () Source #

Add some text to the window, at the current cursor position.

drawBorder Source #

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 :: Update () Source #

Clear the window content by drawing blanks to every position.

clearLine :: Update () Source #

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

setAttribute :: Attribute -> Bool -> Update () Source #

Set a single Attribute on the current window. No other attributes are modified.

setAttributes :: [Attribute] -> Update () Source #

Set all Attributes at once on the current window. Any attributes not included in the list will be unset.

Colors

data Color Source #

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 maxColor when using extended colors.

Instances

Eq Color Source # 

Methods

(==) :: Color -> Color -> Bool #

(/=) :: Color -> Color -> Bool #

Show Color Source # 

Methods

showsPrec :: Int -> Color -> ShowS #

show :: Color -> String #

showList :: [Color] -> ShowS #

data ColorID Source #

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.

defineColor Source #

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

newColorID Source #

Arguments

:: Color

Foreground

-> Color

Background

-> Integer

A value n, such that (0 < nmaxColorID)

-> 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.

setColorID Source #

Arguments

:: Color

Foreground

-> Color

Background

-> ColorID

The ColorID to change

-> Curses () 

maxColorID :: Curses Integer Source #

Get the maximum color ID supported by the current terminal

Glyphs

data Glyph Source #

A glyph is a character, typically spacing, combined with a set of attributes.

Constructors

Glyph 

Instances

Eq Glyph Source # 

Methods

(==) :: Glyph -> Glyph -> Bool #

(/=) :: Glyph -> Glyph -> Bool #

Show Glyph Source # 

Methods

showsPrec :: Int -> Glyph -> ShowS #

show :: Glyph -> String #

showList :: [Glyph] -> ShowS #

VT100 drawing glyphs

glyphCornerUL :: Glyph Source #

Upper left corner

glyphCornerLL :: Glyph Source #

Lower left corner

glyphCornerUR :: Glyph Source #

Upper right corner

glyphCornerLR :: Glyph Source #

Lower right corner

glyphTeeL :: Glyph Source #

Tee pointing right

glyphTeeR :: Glyph Source #

Tee pointing left

glyphTeeB :: Glyph Source #

Tee pointing up

glyphTeeT :: Glyph Source #

Tee pointing down

glyphLineH :: Glyph Source #

Horizontal line

glyphLineV :: Glyph Source #

Vertical line

glyphPlus :: Glyph Source #

Large plus or crossover

glyphScan1 :: Glyph Source #

Scan line 1

glyphScan9 :: Glyph Source #

Scan line 9

glyphStipple :: Glyph Source #

Stipple, or checker board

glyphDegree :: Glyph Source #

Degree symbol

Teletype 5410v1 symbols

glyphArrowL :: Glyph Source #

Arrow pointing left

glyphArrowR :: Glyph Source #

Arrow pointing right

glyphArrowD :: Glyph Source #

Arrow pointing down

glyphArrowU :: Glyph Source #

Arrow pointing up

glyphBoard :: Glyph Source #

Board of squares

glyphLantern :: Glyph Source #

Lantern symbol

glyphBlock :: Glyph Source #

Solid square block

Other glyphs

glyphS3 :: Glyph Source #

Scan line 3

glyphS7 :: Glyph Source #

Scan line 7

glyphNE :: Glyph Source #

Not equal

glyphLTE :: Glyph Source #

Less than or equal

glyphGTE :: Glyph Source #

Greater than or equal

glyphSterling :: Glyph Source #

UK pounds sterling symbol

Event handling

getEvent Source #

Arguments

:: Window 
-> Maybe Integer

Timeout, in milliseconds

-> Curses (Maybe Event) 

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

data Key Source #

Instances

Eq Key Source # 

Methods

(==) :: Key -> Key -> Bool #

(/=) :: Key -> Key -> Bool #

Show Key Source # 

Methods

showsPrec :: Int -> Key -> ShowS #

show :: Key -> String #

showList :: [Key] -> ShowS #

Mouse events

data MouseState Source #

Constructors

MouseState 

Fields

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

setRaw :: Bool -> Curses () Source #

Runs raw() or noraw()

setCBreak :: Bool -> Curses () Source #

Runs cbreak() or nocbreak()

setEcho :: Bool -> Curses () Source #

Runs echo() or noecho()

baudrate :: Curses Integer Source #

Get the output speed of the current terminal, in bits per second.

hasMouse :: Curses Bool Source #

Check if the terminal has a mouse

enclosed Source #

Arguments

:: Window 
-> Integer

Row

-> Integer

Column

-> Curses Bool 

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.

setRowsTouched Source #

Arguments

:: Bool 
-> Integer

Start

-> Integer

Count

-> Update () 

Set whether particular rows in the window have been “touched”.

setKeypad :: Window -> Bool -> Curses () Source #

Enable/disable support for special keys.

resizeTerminal :: Integer -> Integer -> Curses () Source #

Attempt to resize the terminal to the given number of lines and columns.