# std/rdstdin

Theme:

- Manual
- Standard library
- Index
- Compiler docs
- Fusion docs
- devel, stable

Search:
Source Edit

This module contains code for reading from stdin. On UNIX the linenoise library is wrapped and set up to provide default key bindings (e.g. you can navigate with the arrow keys). On Windows `system.readLine` is used. This suffices because Windows' console already provides the wanted functionality.

Example: cmd: -r:off

    import std/rdstdin
    echo readLineFromStdin("Is Nim awesome? (Y/n): ")
    var line: string
    while true:
      let ok = readLineFromStdin("How are you? ", line)
      if not ok: break # ctrl-C or ctrl-D will cause a break
      if line.len > 0: echo line
    echo "exiting"

# Procs

    proc readLineFromStdin(prompt: string): string {.
        ...tags: [ReadIOEffect, WriteIOEffect], raises: [IOError, EOFError],
        forbids: [].}

  Reads a line from stdin. Source Edit

    proc readLineFromStdin(prompt: string; line: var string): bool {.
        ...tags: [ReadIOEffect, WriteIOEffect], raises: [IOError], forbids: [].}

  Reads a `line` from stdin. `line` must not be `nil`! May throw an IO exception. A line of text may be delimited by `CR`, `LF` or `CRLF`. The newline character(s) are not part of the returned string. Returns `false` if the end of the file has been reached, `true` otherwise. If `false` is returned `line` contains no new data. Source Edit