Spec-Zone.ru › Nim

std/terminal

ИсточникИзменить

Этот модуль содержит несколько процедур для управления терминалом (также называемым консолью). В UNIX-системах реализация просто использует ANSI-escape-последовательности и не зависит от других модулей; в Windows используется API Windows. Изменение стиля сохраняется даже после завершения программы! Используйте код exitprocs.addExitProc(resetAttributes) для восстановления значений по умолчанию. Аналогично, если вы скрываете курсор, убедитесь, что вы покажете его с помощью showCursor перед завершением работы.

Полоса прогресса

Пример базовой полосы прогресса:

Пример: cmd: -r:off

import std/terminal
import std/[os, strutils]

for i in 0..100:
  stdout.styledWriteLine(fgRed, "0% ", fgWhite, '#'.repeat i, if i > 50: fgGreen else: fgYellow, "\t", $i , "%")
  sleep 42
  cursorUp 1
  eraseLine()

stdout.resetAttributes()

Использование цветного и стилизованного текста

Процедуры, такие как styledWriteLine, styledEcho и т. д., оказывают временное влияние на параметры текста. Параметры стиля влияют только на параметр текста сразу после них. После вызова эти процедуры сбросят стандартный стиль терминала. В то время как setBackGroundColor, setForeGroundColor и т. д. оказывают длительное влияние на терминал, вы можете использовать resetAttributes для сброса стандартного стиля терминала.

Пример: cmd: -r:off

import std/terminal
stdout.styledWriteLine({styleBright, styleBlink, styleUnderscore}, "styled text ")
stdout.styledWriteLine(fgRed, "red text ")
stdout.styledWriteLine(fgWhite, bgRed, "white text in red background")
stdout.styledWriteLine(" ordinary text without style ")

stdout.setBackGroundColor(bgCyan, true)
stdout.setForeGroundColor(fgBlue)
stdout.write("blue text in cyan background")
stdout.resetAttributes()

# You can specify multiple text parameters. Style parameters
# only affect the text parameter right after them.
styledEcho styleBright, fgGreen, "[PASS]", resetStyle, fgGreen, " Yay!"

stdout.styledWriteLine(fgRed, "red text ", styleBright, "bold red", fgDefault, " bold text")

Импорты

macros, strformat, strutils, colors, winlean, winlean, os, os

Типы

BackgroundColor = enum
  bgBlack = 40,             ## black
  bgRed,                    ## red
  bgGreen,                  ## green
  bgYellow,                 ## yellow
  bgBlue,                   ## blue
  bgMagenta,                ## magenta
  bgCyan,                   ## cyan
  bgWhite,                  ## white
  bg8Bit,                   ## 256-color (not supported, see `enableTrueColors` instead.)
  bgDefault                  ## default terminal background color
Цвета фона терминала. Источник Изменить
ForegroundColor = enum
  fgBlack = 30,             ## black
  fgRed,                    ## red
  fgGreen,                  ## green
  fgYellow,                 ## yellow
  fgBlue,                   ## blue
  fgMagenta,                ## magenta
  fgCyan,                   ## cyan
  fgWhite,                  ## white
  fg8Bit,                   ## 256-color (not supported, see `enableTrueColors` instead.)
  fgDefault                  ## default terminal foreground color
Цвета переднего плана терминала. Источник Изменить
Style = enum
  styleBright = 1,          ## bright text
  styleDim,                 ## dim text
  styleItalic,              ## italic (or reverse on terminals not supporting)
  styleUnderscore,          ## underscored text
  styleBlink,               ## blinking/bold text
  styleBlinkRapid,          ## rapid blinking/bold text (not widely supported)
  styleReverse,             ## reverse
  styleHidden,              ## hidden text
  styleStrikethrough         ## strikethrough
Различные стили для вывода текста. Источник Изменить
TerminalCmd = enum
  resetStyle,               ## reset attributes
  fgColor,                  ## set foreground's true color
  bgColor                    ## set background's true color
Команды, которые могут быть выражены как аргументы Источник Изменить

Константы

ansiResetCode = "\e[0m"
Источник Изменить

Процедуры

proc ansiBackgroundColorCode(color: Color): string {....raises: [], tags: [],
    forbids: [].}
Исходный код Изменить
proc ansiForegroundColorCode(color: Color): string {....raises: [], tags: [],
    forbids: [].}
Исходный код Изменить
proc ansiForegroundColorCode(fg: ForegroundColor; bright = false): string {.
    ...raises: [], tags: [], forbids: [].}
Исходный код Изменить
proc ansiStyleCode(style: int): string {....raises: [], tags: [], forbids: [].}
Исходный код Изменить
proc cursorBackward(f: File; count = 1) {....raises: [OSError], tags: [RootEffect],
    forbids: [].}
Перемещает курсор назад на count столбцов.

Пример: cmd: -r:off

stdout.cursorBackward(2)
write(stdout, "Hello World!") # anything written at that location will be erased/replaced with this
Исходный код Изменить
proc cursorDown(f: File; count = 1) {....raises: [OSError], tags: [RootEffect],
                                      forbids: [].}
Перемещает курсор вниз на count строки.

Пример: cmd: -r:off

stdout.cursorDown(2)
write(stdout, "Hello World!") # anything written at that location will be erased/replaced with this
Исходный код Изменить
proc cursorForward(f: File; count = 1) {....raises: [OSError], tags: [RootEffect],
    forbids: [].}
Перемещает курсор вперёд на count столбцов.

Пример: cmd: -r:off

stdout.cursorForward(2)
write(stdout, "Hello World!") # anything written at that location will be erased/replaced with this
Исходный код Изменить
proc cursorUp(f: File; count = 1) {....raises: [OSError], tags: [RootEffect],
                                    forbids: [].}
Перемещает курсор вверх на count строки.

Пример: cmd: -r:off

stdout.cursorUp(2)
write(stdout, "Hello World!") # anything written at that location will be erased/replaced with this
Исходный код Изменить
proc disableTrueColors() {....raises: [], tags: [RootEffect, ReadEnvEffect],
                           forbids: [].}
Отключает режим true color. Исходный код Изменить
proc enableTrueColors() {....raises: [], tags: [RootEffect, ReadEnvEffect],
                          forbids: [].}
Включает режим true color. Исходный код Изменить
proc eraseLine(f: File) {....raises: [OSError], tags: [RootEffect], forbids: [].}
Очищает всю текущую строку.

Пример: cmd: -r:off

write(stdout, "never mind")
stdout.eraseLine() # nothing will be printed on the screen
Исходный код Изменить
proc eraseScreen(f: File) {....raises: [OSError], tags: [RootEffect], forbids: [].}
Очищает экран с фоновым цветом и перемещает курсор в начало. Исходный код Изменить
proc getch(): char {....raises: [], tags: [], forbids: [].}
Читает один символ с терминала, блокируя до ввода. Символ не отображается на терминале. Исходный код Изменить
proc getCursorPos(): tuple[x, y: int] {....raises: [ValueError, IOError, OSError],
                                        tags: [], forbids: [].}
Исходный код Изменить
proc hideCursor(f: File) {....raises: [OSError], tags: [RootEffect], forbids: [].}
Скрывает курсор. Исходный код Изменить
proc isatty(f: File): bool {....raises: [], tags: [], forbids: [].}
Возвращает true, если f ассоциирован с терминальным устройством. Исходный код Изменить
proc isTrueColorSupported(): bool {....raises: [], tags: [RootEffect], forbids: [].}
Возвращает true, если терминал поддерживает true color. Исходный код Изменить
proc readPasswordFromStdin(prompt = "password: "): string {....raises: [IOError],
    tags: [ReadIOEffect, WriteIOEffect], forbids: [].}
Читает пароль из stdin без вывода. Исходный код Изменить
proc readPasswordFromStdin(prompt: string; password: var string): bool {.
    ...tags: [ReadIOEffect, WriteIOEffect], raises: [IOError], forbids: [].}
Читает password из stdin без вывода. password не должен быть nil! Возвращает false если достигнут конец файла, true в противном случае. Исходный код Изменить
proc resetAttributes() {.noconv, ...raises: [], tags: [RootEffect], forbids: [].}
Сбрасывает все атрибуты в stdout. Рекомендуется зарегистрировать это как процедуру выхода с exitprocs.addExitProc(resetAttributes). Исходный код Изменить
proc resetAttributes(f: File) {....raises: [], tags: [RootEffect], forbids: [].}
Сбрасывает все атрибуты. Исходный код Изменить
proc setBackgroundColor(f: File; bg: BackgroundColor; bright = false) {.
    ...raises: [], tags: [RootEffect], forbids: [].}
Устанавливает фоновый цвет терминала. Исходный код Изменить
proc setBackgroundColor(f: File; color: Color) {....raises: [IOError],
    tags: [RootEffect, WriteIOEffect], forbids: [].}
Устанавливает истинный фоновый цвет терминала. Исходный код Изменить
proc setCursorPos(f: File; x, y: int) {....raises: [OSError], tags: [RootEffect],
                                        forbids: [].}
Устанавливает курсор терминала в позицию (x,y). (0,0) — верхний левый угол экрана. Исходный код Изменить
proc setCursorXPos(f: File; x: int) {....raises: [OSError], tags: [RootEffect],
                                      forbids: [].}
Устанавливает курсор терминала в позицию по x. Позиция по y не меняется. Исходный код Изменить
proc setCursorYPos(f: File; y: int) {....raises: [OSError], tags: [RootEffect],
                                      forbids: [].}
Устанавливает курсор терминала в позицию по y. Позиция по x не меняется. .. warning:: Это не поддерживается на UNIX! Исходный код Изменить
proc setForegroundColor(f: File; color: Color) {....raises: [IOError],
    tags: [RootEffect, WriteIOEffect], forbids: [].}
Устанавливает истинный цвет переднего плана терминала. Исходный код Изменить
proc setForegroundColor(f: File; fg: ForegroundColor; bright = false) {.
    ...raises: [], tags: [RootEffect], forbids: [].}
Устанавливает цвет переднего плана терминала. Исходный код Изменить
proc setStyle(f: File; style: set[Style]) {....raises: [], tags: [RootEffect],
    forbids: [].}
Устанавливает стиль терминала. Исходный код Изменить
proc showCursor(f: File) {....raises: [OSError], tags: [RootEffect], forbids: [].}
Показать курсор. Исходный код Редактировать
proc terminalHeight(): int {....raises: [], tags: [], forbids: [].}
Возвращает высоту терминала в строках. Исходный код Редактировать
proc terminalHeightIoctl(handles: openArray[Handle]): int {....raises: [],
    tags: [], forbids: [].}
Исходный код Редактировать
proc terminalSize(): tuple[w, h: int] {....raises: [], tags: [], forbids: [].}
Возвращает ширину и высоту терминала в виде кортежа. Внутренне вызывает terminalWidth и terminalHeight, поэтому применяются те же предположения. Исходный код Редактировать
proc terminalWidth(): int {....raises: [], tags: [], forbids: [].}
Возвращает ширину терминала в столбцах. Исходный код Редактировать
proc terminalWidthIoctl(handles: openArray[Handle]): int {....raises: [], tags: [],
    forbids: [].}
Исходный код Редактировать
proc writeStyled(txt: string; style: set[Style] = {styleBright}) {.
    ...raises: [IOError], tags: [RootEffect, WriteIOEffect], forbids: [].}
Выводит текст txt с заданным style в стандартный вывод. Исходный код Редактировать

Макросы

macro styledWrite(f: File; m: varargs[typed]): untyped
Аналогично write, но обрабатывает аргументы стилей терминала специально. Когда какой-то аргумент является Style, set[Style], ForegroundColor, BackgroundColor или TerminalCmd, тогда он не отправляется напрямую в f, а вместо этого вызывается соответствующий процесс стиля терминала.

Пример: cmd: -r:off

stdout.styledWrite(fgRed, "red text ")
stdout.styledWrite(fgGreen, "green text")
Исходный код Редактировать

Шаблоны

template ansiBackgroundColorCode(color: static[Color]): string
Исходный код Редактировать
template ansiForegroundColorCode(color: static[Color]): string
Исходный код Редактировать
template ansiForegroundColorCode(fg: static[ForegroundColor];
                                 bright: static[bool] = false): string
Исходный код Редактировать
template ansiStyleCode(style: static[Style]): string
Исходный код Редактировать
template ansiStyleCode(style: Style): string
Исходный код Редактировать
template cursorBackward(count = 1)
Исходный код Редактировать
template cursorDown(count = 1)
Исходный код Редактировать
template cursorForward(count = 1)
Исходный код Редактировать
template cursorUp(count = 1)
Исходный код Редактировать
template eraseLine()
Исходный код Редактировать
template eraseScreen()
Исходный код Редактировать
template hideCursor()
Исходный код Редактировать
template setBackgroundColor(bg: BackgroundColor; bright = false)
Исходный код Редактировать
template setBackgroundColor(color: Color)
Исходный код Редактировать
template setCursorPos(x, y: int)
Исходный код Редактировать
template setCursorXPos(x: int)
Исходный код Редактировать
template setCursorYPos(x: int)
Исходный код Редактировать
template setForegroundColor(color: Color)
Исходный код Редактировать
template setForegroundColor(fg: ForegroundColor; bright = false)
Исходный код Редактировать
template setStyle(style: set[Style])
Исходный код Редактировать
template showCursor()
Исходный код Редактировать
template styledEcho(args: varargs[untyped])
Выводит аргументы стилей в стандартный вывод, используя styledWriteLine. Исходный код Редактировать
template styledWriteLine(f: File; args: varargs[untyped])
Вызывает styledWrite и добавляет символ новой строки в конце.

Пример:

proc error(msg: string) =
  styledWriteLine(stderr, fgRed, "Error: ", resetStyle, msg)
Исходный код Редактировать

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/terminal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API