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
- Различные стили для вывода текста. Источник Изменить
Константы
Процедуры
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