терминал
Этот модуль содержит несколько процедур для управления терминалом (также называемым консолью). В UNIX реализация просто использует последовательности ANSI-экранов и не зависит от других модулей, в Windows используется API Windows. Изменение стиля сохраняется даже после завершения программы! Используйте код system.addQuitProc(resetAttributes) для восстановления значений по умолчанию. Аналогично, если вы скрыли курсор, убедитесь, что вы его покажете с помощью showCursor перед выходом.
Импорты
- macros, strformat, strutils, colors, termios, posix, os, parseutils, termios
Типы
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
- различные стили вывода текста Исходный код Редактировать
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
- цвета переднего плана терминала Исходный код Редактировать
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
- цвета заднего плана терминала Исходный код Редактировать
TerminalCmd = enum resetStyle, ## reset attributes fgColor, ## set foreground's true color bgColor ## set background's true color
- команды, которые могут быть выражены как аргументы Исходный код Редактировать
Константы
ansiResetCode = "\e[0m"
- Исходный код Редактировать
Процедуры
proc terminalWidthIoctl(fds: openArray[int]): int {...}{.raises: [], tags: [].}- Возвращает ширину терминала из первого файла описания, поддерживающего ioctl. Исходный код Редактировать
proc terminalHeightIoctl(fds: openArray[int]): int {...}{.raises: [], tags: [].}- Возвращает высоту терминала из первого файла описания, поддерживающего ioctl. Исходный код Редактировать
proc terminalWidth(): int {...}{.raises: [ValueError], tags: [ReadEnvEffect].}- Возвращает разумную ширину терминала, используя стандартные файлы описания, управляющий терминал, переменные окружения или традиционные методы. Исходный код Редактировать
proc terminalHeight(): int {...}{.raises: [ValueError], tags: [ReadEnvEffect].}- Возвращает разумную высоту терминала, используя стандартные файлы описания, управляющий терминал, переменные окружения или традиционные методы. Возвращает ноль, если высота не может быть определена. Исходный код Редактировать
proc terminalSize(): tuple[w, h: int] {...}{.raises: [ValueError], tags: [ReadEnvEffect].}- Возвращает ширину и высоту терминала в виде кортежа. Внутренне вызывает
terminalWidthиterminalHeight, поэтому применяются те же предположения. Исходный код Редактировать proc hideCursor(f: File) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Скрывает курсор. Исходный код Редактировать
proc showCursor(f: File) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Показать курсор. Исходный код Редактировать
proc setCursorPos(f: File; x, y: int) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Устанавливает курсор терминала в позицию (x, y). (0,0) — верхний левый угол экрана. Исходный код Редактировать
proc setCursorXPos(f: File; x: int) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Устанавливает курсор терминала в позицию x. Позиция y не изменяется. Исходный код Редактировать
proc cursorUp(f: File; count = 1) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Перемещает курсор вверх на
countстрок. Исходный код Редактировать proc cursorDown(f: File; count = 1) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Перемещает курсор вниз на
countстрок. Исходный код Редактировать proc cursorForward(f: File; count = 1) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Перемещает курсор вправо на
countстолбцов. Исходный код Редактировать proc cursorBackward(f: File; count = 1) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Перемещает курсор влево на
countстолбцов. Исходный код Редактировать proc eraseLine(f: File) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Очищает текущую строку. Исходный код Редактировать
proc eraseScreen(f: File) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Очищает экран с цветом фона и перемещает курсор в начало. Исходный код Редактировать
proc resetAttributes(f: File) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Сбрасывает все атрибуты. Исходный код Редактировать
proc ansiStyleCode(style: int): string {...}{.raises: [ValueError], tags: [].}- Исходный код Редактировать
proc setStyle(f: File; style: set[Style]) {...}{.raises: [IOError, ValueError], tags: [WriteIOEffect].}- Устанавливает стиль терминала. Исходный код Редактировать
proc writeStyled(txt: string; style: set[Style] = {styleBright}) {...}{. raises: [IOError, ValueError], tags: [WriteIOEffect].}- Выводит текст
txtв заданныйstyleв стандартный вывод. Исходный код Редактировать proc setForegroundColor(f: File; fg: ForegroundColor; bright = false) {...}{. raises: [IOError, ValueError], tags: [WriteIOEffect].}- Устанавливает цвет переднего плана терминала. Исходный код Редактировать
proc setBackgroundColor(f: File; bg: BackgroundColor; bright = false) {...}{. raises: [IOError, ValueError], tags: [WriteIOEffect].}- Устанавливает цвет фона терминала. Исходный код Редактировать
proc ansiForegroundColorCode(fg: ForegroundColor; bright = false): string {...}{. raises: [ValueError], tags: [].}- Исходный код Редактировать
proc ansiForegroundColorCode(color: Color): string {...}{.raises: [ValueError], tags: [].}- Исходный код Редактировать
proc ansiBackgroundColorCode(color: Color): string {...}{.raises: [ValueError], tags: [].}- Исходный код Редактировать
proc setForegroundColor(f: File; color: Color) {...}{.raises: [IOError, ValueError], tags: [RootEffect, WriteIOEffect].}- Устанавливает истинный цвет переднего плана терминала. Исходный код Редактировать
proc setBackgroundColor(f: File; color: Color) {...}{.raises: [IOError, ValueError], tags: [RootEffect, WriteIOEffect].}- Устанавливает истинный цвет фона терминала. Исходный код Редактировать
proc isatty(f: File): bool {...}{.raises: [], tags: [].}- Возвращает true, если
fассоциирован с устройством терминала. Исходный код Редактировать proc getch(): char {...}{.raises: [IOError, EOFError], tags: [ReadIOEffect].}- Считывает один символ из терминала, блокируя до его ввода. Символ не выводится на терминал. Исходный код Редактировать
proc readPasswordFromStdin(prompt: string; password: var TaintedString): bool {...}{. tags: [ReadIOEffect, WriteIOEffect], raises: [IOError].}- Исходный код Редактировать
proc readPasswordFromStdin(prompt = "password: "): TaintedString {...}{. raises: [IOError], tags: [ReadIOEffect, WriteIOEffect].}- Считывает пароль из стандартного ввода без его вывода. Исходный код Редактировать
proc resetAttributes() {...}{.noconv, raises: [IOError], tags: [WriteIOEffect].}- Сбрасывает все атрибуты в стандартном выводе. Рекомендуется зарегистрировать эту функцию как процедуру выхода с помощью
system.addQuitProc(resetAttributes). Исходный код Редактировать proc isTrueColorSupported(): bool {...}{.raises: [], tags: [RootEffect].}- Возвращает true, если терминал поддерживает истинный цвет. Исходный код Редактировать
proc enableTrueColors() {...}{.raises: [], tags: [RootEffect, ReadEnvEffect].}- Включить истинный цвет. Исходный код Редактировать
proc disableTrueColors() {...}{.raises: [], tags: [RootEffect].}- Отключить истинный цвет. Исходный код Редактировать
Макросы
macro styledWrite(f: File; m: varargs[typed]): untyped
-
Аналогично
write, но обрабатывает аргументы стиля терминала специально. Когда какой-либо аргумент являетсяStyle,set[Style],ForegroundColor,BackgroundColorилиTerminalCmd, он не передаётся непосредственно вf, а вместо этого вызывается соответствующая процедура стиля терминала.Пример:
stdout.styledWrite(fgRed, "red text ") stdout.styledWrite(fgGreen, "green text")
Исходный код Редактировать
Шаблоны
template ansiStyleCode(style: Style): string
- Исходный код Редактировать
template ansiStyleCode(style: static[Style]): string
- Исходный код Редактировать
template ansiForegroundColorCode(fg: static[ForegroundColor]; bright: static[bool] = false): string- Исходный код Редактировать
template ansiForegroundColorCode(color: static[Color]): string
- Исходный код Редактировать
template ansiBackgroundColorCode(color: static[Color]): string
- Исходный код Редактировать
template styledWriteLine(f: File; args: varargs[untyped])
-
Вызывает
styledWriteи добавляет перевод строки в конце.Пример:
proc error(msg: string) = styledWriteLine(stderr, fgRed, "Error: ", resetStyle, msg)
Исходный код Редактировать template styledEcho(args: varargs[untyped])
- Выводит аргументы стилей в стандартный вывод, используя
styledWriteLine. Исходный код Редактировать template hideCursor()
- Исходный код Редактировать
template showCursor()
- Исходный код Редактировать
template setCursorPos(x, y: int)
- Исходный код Редактировать
template setCursorXPos(x: int)
- Исходный код Редактировать
template cursorUp(count = 1)
- Исходный код Редактировать
template cursorDown(count = 1)
- Исходный код Редактировать
template cursorForward(count = 1)
- Исходный код Редактировать
template cursorBackward(count = 1)
- Исходный код Редактировать
template eraseLine()
- Исходный код Редактировать
template eraseScreen()
- Исходный код Редактировать
template setStyle(style: set[Style])
- Исходный код Редактировать
template setForegroundColor(fg: ForegroundColor; bright = false)
- Исходный код Редактировать
template setBackgroundColor(bg: BackgroundColor; bright = false)
- Исходный код Редактировать
template setForegroundColor(color: Color)
- Исходный код Редактировать
template setBackgroundColor(color: Color)
- Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/terminal.html