System.Posix.Terminal

unix-2.7.2.2: POSIX functionality

Copyright | (c) The University of Glasgow 2002
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | provisional
Portability | non-portable (requires POSIX)
Safe Haskell | Safe
Language | Haskell2010

System.Posix.Terminal

Contents

- Terminal support
  - Terminal attributes
  - Terminal operations
  - Process groups
  - Testing a file descriptor
  - Pseudoterminal operations

Description

POSIX Terminal support

Synopsis

- data TerminalAttributes
- getTerminalAttributes :: Fd -> IO TerminalAttributes
- data TerminalState
  - = Immediately
  - | WhenDrained
  - | WhenFlushed
- setTerminalAttributes :: Fd -> TerminalAttributes -> TerminalState -> IO ()
- data TerminalMode
  - = InterruptOnBreak
  - | MapCRtoLF
  - | IgnoreBreak
  - | IgnoreCR
  - | IgnoreParityErrors
  - | MapLFtoCR
  - | CheckParity
  - | StripHighBit
  - | StartStopInput
  - | StartStopOutput
  - | MarkParityErrors
  - | ProcessOutput
  - | LocalMode
  - | ReadEnable
  - | TwoStopBits
  - | HangupOnClose
  - | EnableParity
  - | OddParity
  - | EnableEcho
  - | EchoErase
  - | EchoKill
  - | EchoLF
  - | ProcessInput
  - | ExtendedFunctions
  - | KeyboardInterrupts
  - | NoFlushOnInterrupt
  - | BackgroundWriteInterrupt
- withoutMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes
- withMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes
- terminalMode :: TerminalMode -> TerminalAttributes -> Bool
- bitsPerByte :: TerminalAttributes -> Int
- withBits :: TerminalAttributes -> Int -> TerminalAttributes
- data ControlCharacter
  - = EndOfFile
  - | EndOfLine
  - | Erase
  - | Interrupt
  - | Kill
  - | Quit
  - | Start
  - | Stop
  - | Suspend
- controlChar :: TerminalAttributes -> ControlCharacter -> Maybe Char
- withCC :: TerminalAttributes -> (ControlCharacter, Char) -> TerminalAttributes
- withoutCC :: TerminalAttributes -> ControlCharacter -> TerminalAttributes
- inputTime :: TerminalAttributes -> Int
- withTime :: TerminalAttributes -> Int -> TerminalAttributes
- minInput :: TerminalAttributes -> Int
- withMinInput :: TerminalAttributes -> Int -> TerminalAttributes
- data BaudRate
  - = B0
  - | B50
  - | B75
  - | B110
  - | B134
  - | B150
  - | B200
  - | B300
  - | B600
  - | B1200
  - | B1800
  - | B2400
  - | B4800
  - | B9600
  - | B19200
  - | B38400
  - | B57600
  - | B115200
- inputSpeed :: TerminalAttributes -> BaudRate
- withInputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes
- outputSpeed :: TerminalAttributes -> BaudRate
- withOutputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes
- sendBreak :: Fd -> Int -> IO ()
- drainOutput :: Fd -> IO ()
- data QueueSelector
  - = InputQueue
  - | OutputQueue
  - | BothQueues
- discardData :: Fd -> QueueSelector -> IO ()
- data FlowAction
  - = SuspendOutput
  - | RestartOutput
  - | TransmitStop
  - | TransmitStart
- controlFlow :: Fd -> FlowAction -> IO ()
- getTerminalProcessGroupID :: Fd -> IO ProcessGroupID
- setTerminalProcessGroupID :: Fd -> ProcessGroupID -> IO ()
- queryTerminal :: Fd -> IO Bool
- getTerminalName :: Fd -> IO FilePath
- getControllingTerminalName :: IO FilePath
- openPseudoTerminal :: IO (Fd, Fd)
- getSlaveTerminalName :: Fd -> IO FilePath

# Terminal support

## Terminal attributes

data TerminalAttributes #

getTerminalAttributes :: Fd -> IO TerminalAttributes #

`getTerminalAttributes fd` calls `tcgetattr` to obtain the `TerminalAttributes` associated with `Fd` `fd`.

data TerminalState #

Constructors

Immediately |
WhenDrained |
WhenFlushed |

setTerminalAttributes :: Fd -> TerminalAttributes -> TerminalState -> IO () #

`setTerminalAttributes fd attr ts` calls `tcsetattr` to change the `TerminalAttributes` associated with `Fd` `fd` to `attr`, when the terminal is in the state indicated by `ts`.

data TerminalMode #

Constructors

InterruptOnBreak |
MapCRtoLF |
IgnoreBreak |
IgnoreCR |
IgnoreParityErrors |
MapLFtoCR |
CheckParity |
StripHighBit |
StartStopInput |
StartStopOutput |
MarkParityErrors |
ProcessOutput |
LocalMode |
ReadEnable |
TwoStopBits |
HangupOnClose |
EnableParity |
OddParity |
EnableEcho |
EchoErase |
EchoKill |
EchoLF |
ProcessInput |
ExtendedFunctions |
KeyboardInterrupts |
NoFlushOnInterrupt |
BackgroundWriteInterrupt |

withoutMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes #

withMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes #

terminalMode :: TerminalMode -> TerminalAttributes -> Bool #

bitsPerByte :: TerminalAttributes -> Int #

withBits :: TerminalAttributes -> Int -> TerminalAttributes #

data ControlCharacter #

Constructors

EndOfFile |
EndOfLine |
Erase |
Interrupt |
Kill |
Quit |
Start |
Stop |
Suspend |

controlChar :: TerminalAttributes -> ControlCharacter -> Maybe Char #

withCC :: TerminalAttributes -> (ControlCharacter, Char) -> TerminalAttributes #

withoutCC :: TerminalAttributes -> ControlCharacter -> TerminalAttributes #

inputTime :: TerminalAttributes -> Int #

withTime :: TerminalAttributes -> Int -> TerminalAttributes #

minInput :: TerminalAttributes -> Int #

withMinInput :: TerminalAttributes -> Int -> TerminalAttributes #

data BaudRate #

Constructors

B0 |
B50 |
B75 |
B110 |
B134 |
B150 |
B200 |
B300 |
B600 |
B1200 |
B1800 |
B2400 |
B4800 |
B9600 |
B19200 |
B38400 |
B57600 |
B115200 |

inputSpeed :: TerminalAttributes -> BaudRate #

withInputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes #

outputSpeed :: TerminalAttributes -> BaudRate #

withOutputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes #

## Terminal operations

sendBreak :: Fd -> Int -> IO () #

`sendBreak fd duration` calls `tcsendbreak` to transmit a continuous stream of zero-valued bits on `Fd` `fd` for the specified implementation-dependent `duration`.

drainOutput :: Fd -> IO () #

`drainOutput fd` calls `tcdrain` to block until all output written to `Fd` `fd` has been transmitted.

Throws `IOError` ("unsupported operation") if platform does not provide `tcdrain(3)` (use `#if HAVE_TCDRAIN` CPP guard to detect availability).

data QueueSelector #

Constructors

InputQueue |
OutputQueue |
BothQueues |

discardData :: Fd -> QueueSelector -> IO () #

`discardData fd queues` calls `tcflush` to discard pending input and/or output for `Fd` `fd`, as indicated by the `QueueSelector` `queues`.

data FlowAction #

Constructors

SuspendOutput | TCOOFF
RestartOutput | TCOON
TransmitStop | TCIOFF
TransmitStart | TCION

controlFlow :: Fd -> FlowAction -> IO () #

`controlFlow fd action` calls `tcflow` to control the flow of data on `Fd` `fd`, as indicated by `action`.

## Process groups

getTerminalProcessGroupID :: Fd -> IO ProcessGroupID #

`getTerminalProcessGroupID fd` calls `tcgetpgrp` to obtain the `ProcessGroupID` of the foreground process group associated with the terminal attached to `Fd` `fd`.

setTerminalProcessGroupID :: Fd -> ProcessGroupID -> IO () #

`setTerminalProcessGroupID fd pgid` calls `tcsetpgrp` to set the `ProcessGroupID` of the foreground process group associated with the terminal attached to `Fd` `fd` to `pgid`.

## Testing a file descriptor

queryTerminal :: Fd -> IO Bool #

`queryTerminal fd` calls `isatty` to determine whether or not `Fd` `fd` is associated with a terminal.

getTerminalName :: Fd -> IO FilePath #

`getTerminalName fd` calls `ttyname` to obtain a name associated with the terminal for `Fd` `fd`. If `fd` is associated with a terminal, `getTerminalName` returns the name of the terminal.

getControllingTerminalName :: IO FilePath #

`getControllingTerminalName` calls `ctermid` to obtain a name associated with the controlling terminal for the process. If a controlling terminal exists, `getControllingTerminalName` returns the name of the controlling terminal.

Throws `IOError` ("unsupported operation") if platform does not provide `ctermid(3)` (use `#if HAVE_CTERMID` CPP guard to detect availability).

## Pseudoterminal operations

openPseudoTerminal :: IO (Fd, Fd) #

`openPseudoTerminal` creates a pseudoterminal (pty) pair, and returns the newly created pair as a (`master`, `slave`) tuple.

getSlaveTerminalName :: Fd -> IO FilePath #

`getSlaveTerminalName` calls `ptsname` to obtain the name of the slave terminal associated with a pseudoterminal pair. The file descriptor to pass in must be that of the master.