Skip to content

TTY

[Стабильно: 2 - Стабильно]

Стабильно: 2 Стабильность: 2 - Стабильно

Исходный код: lib/tty.js

Модуль node:tty предоставляет классы tty.ReadStream и tty.WriteStream. В большинстве случаев использовать этот модуль напрямую не потребуется или не будет возможно. Тем не менее, к нему можно получить доступ с помощью:

js
const tty = require('node:tty')

Когда Node.js обнаруживает, что он запущен с подключенным текстовым терминалом ("TTY"), process.stdin по умолчанию будет инициализирован как экземпляр tty.ReadStream, а process.stdout и process.stderr по умолчанию будут экземплярами tty.WriteStream. Предпочтительный способ определения того, запущен ли Node.js в контексте TTY, — проверить, что значение свойства process.stdout.isTTY равно true:

bash
$ node -p -e "Boolean(process.stdout.isTTY)"
true
$ node -p -e "Boolean(process.stdout.isTTY)" | cat
false

В большинстве случаев у приложения не должно быть причин для ручного создания экземпляров классов tty.ReadStream и tty.WriteStream.

Класс: tty.ReadStream

Добавлено в: v0.5.8

Представляет читаемую сторону TTY. В обычных условиях process.stdin будет единственным экземпляром tty.ReadStream в процессе Node.js, и не должно быть причин создавать дополнительные экземпляры.

readStream.isRaw

Добавлено в: v0.7.7

Значение типа boolean, равное true, если TTY в настоящее время настроен на работу как необработанное устройство.

Этот флаг всегда равен false при запуске процесса, даже если терминал работает в необработанном режиме. Его значение изменится после последующих вызовов setRawMode.

readStream.isTTY

Добавлено в: v0.5.8

Значение типа boolean, которое всегда равно true для экземпляров tty.ReadStream.

readStream.setRawMode(mode)

Добавлено в: v0.7.7

  • mode <boolean> Если true, настраивает tty.ReadStream для работы как raw-устройство. Если false, настраивает tty.ReadStream для работы в режиме по умолчанию. Свойство readStream.isRaw будет установлено в результирующий режим.
  • Возвращает: <this> Экземпляр потока чтения.

Позволяет настроить tty.ReadStream так, чтобы он работал как raw-устройство.

В raw-режиме ввод всегда доступен посимвольно, без учета модификаторов. Кроме того, вся специальная обработка символов терминалом отключена, включая отображение вводимых символов. + больше не будет вызывать SIGINT в этом режиме.

Класс: tty.WriteStream

Добавлено в: v0.5.8

Представляет собой записываемую сторону TTY. В обычных условиях process.stdout и process.stderr будут единственными экземплярами tty.WriteStream, созданными для процесса Node.js, и не должно быть причин создавать дополнительные экземпляры.

new tty.ReadStream(fd[, options])

[История]

ВерсияИзменения
v0.9.4Поддерживается аргумент options.
v0.5.8Добавлено в: v0.5.8
  • fd <number> Дескриптор файла, связанный с TTY.
  • options <Object> Параметры, переданные родителю net.Socket, см. options конструктора net.Socket.
  • Возвращает <tty.ReadStream>

Создает ReadStream для fd, связанного с TTY.

new tty.WriteStream(fd)

Добавлено в: v0.5.8

Создает WriteStream для fd, связанного с TTY.

Событие: 'resize'

Добавлено в: v0.7.7

Событие 'resize' генерируется всякий раз, когда изменяется одно из свойств writeStream.columns или writeStream.rows. При вызове коллбэк-функции слушателя аргументы не передаются.

js
process.stdout.on('resize', () => {
  console.log('Размер экрана изменился!')
  console.log(`${process.stdout.columns}x${process.stdout.rows}`)
})

writeStream.clearLine(dir[, callback])

[История]

ВерсияИзменения
v12.7.0Колбэк и возвращаемое значение метода write() потока стали доступны.
v0.7.7Добавлено в: v0.7.7
  • dir <number>

    • -1: влево от курсора
    • 1: вправо от курсора
    • 0: вся строка
  • callback <Function> Вызывается после завершения операции.

  • Возвращаемое значение: <boolean> false, если поток ожидает, что вызывающий код будет ждать события 'drain', прежде чем продолжить запись дополнительных данных; в противном случае true.

writeStream.clearLine() очищает текущую строку этого WriteStream в направлении, указанном dir.

writeStream.clearScreenDown([callback])

[История]

ВерсияИзменения
v12.7.0Колбэк и возвращаемое значение метода write() потока стали доступны.
v0.7.7Добавлено в: v0.7.7
  • callback <Function> Вызывается после завершения операции.
  • Возвращаемое значение: <boolean> false, если поток ожидает, что вызывающий код будет ждать события 'drain', прежде чем продолжить запись дополнительных данных; в противном случае true.

writeStream.clearScreenDown() очищает этот WriteStream от текущего курсора вниз.

writeStream.columns

Добавлен в: v0.7.7

number, указывающий количество столбцов, которые в данный момент имеет TTY. Это свойство обновляется всякий раз, когда генерируется событие 'resize'.

writeStream.cursorTo(x[, y][, callback])

[История]

ВерсияИзменения
v12.7.0Возвращаемое значение и обратный вызов write() потока стали доступны.
v0.7.7Добавлено в: v0.7.7
  • x <number>
  • y <number>
  • callback <Function> Вызывается после завершения операции.
  • Возвращает: <boolean> false, если поток желает, чтобы вызывающий код ожидал события 'drain' перед продолжением записи дополнительных данных; в противном случае true.

writeStream.cursorTo() перемещает курсор этого WriteStream в указанную позицию.

writeStream.getColorDepth([env])

Добавлен в: v9.9.0

  • env <Object> Объект, содержащий переменные среды для проверки. Это позволяет имитировать использование конкретного терминала. По умолчанию: process.env.
  • Возвращает: <number>

Возвращает:

  • 1 для 2,
  • 4 для 16,
  • 8 для 256,
  • 24 для 16 777 216 поддерживаемых цветов.

Используйте это, чтобы определить, какие цвета поддерживает терминал. Из-за природы цветов в терминалах возможны как ложные срабатывания, так и ложные отрицательные результаты. Это зависит от информации о процессе и переменных среды, которые могут сообщать ложную информацию о используемом терминале. Можно передать объект env для имитации использования определенного терминала. Это может быть полезно для проверки того, как ведут себя определенные параметры среды.

Для принудительной установки конкретной поддержки цвета используйте один из приведенных ниже параметров среды.

  • 2 цвета: FORCE_COLOR = 0 (Отключает цвета)
  • 16 цветов: FORCE_COLOR = 1
  • 256 цветов: FORCE_COLOR = 2
  • 16 777 216 цветов: FORCE_COLOR = 3

Отключение поддержки цвета также возможно с помощью переменных среды NO_COLOR и NODE_DISABLE_COLORS.

writeStream.getWindowSize()

Добавлено в: v0.7.7

writeStream.getWindowSize() возвращает размер TTY, соответствующий этому WriteStream. Массив имеет тип [numColumns, numRows], где numColumns и numRows представляют количество столбцов и строк в соответствующем TTY.

writeStream.hasColors([count][, env])

Добавлено в: v11.13.0, v10.16.0

  • count <integer> Количество запрашиваемых цветов (минимум 2). По умолчанию: 16.
  • env <Object> Объект, содержащий переменные среды для проверки. Это позволяет имитировать использование определённого терминала. По умолчанию: process.env.
  • Возвращает: <boolean>

Возвращает true, если writeStream поддерживает не менее того количества цветов, которое указано в count. Минимальная поддержка — 2 (чёрный и белый).

Этот метод имеет те же ложные срабатывания и пропуски, что и описано в writeStream.getColorDepth().

js
process.stdout.hasColors()
// Возвращает true или false в зависимости от того, поддерживает ли `stdout` как минимум 16 цветов.
process.stdout.hasColors(256)
// Возвращает true или false в зависимости от того, поддерживает ли `stdout` как минимум 256 цветов.
process.stdout.hasColors({ TMUX: '1' })
// Возвращает true.
process.stdout.hasColors(2 ** 24, { TMUX: '1' })
// Возвращает false (настройка среды имитирует поддержку 2 ** 8 цветов).

writeStream.isTTY

Добавлено в: v0.5.8

boolean, который всегда равен true.

writeStream.moveCursor(dx, dy[, callback])

[История]

ВерсияИзменения
v12.7.0Возвращается значение и вызывается обратный вызов write() потока.
v0.7.7Добавлено в: v0.7.7
  • dx <number>
  • dy <number>
  • callback <Function> Вызывается после завершения операции.
  • Возвращает: <boolean> false, если поток ожидает, что вызывающий код будет ждать события 'drain', прежде чем продолжить запись дополнительных данных; в противном случае true.

writeStream.moveCursor() перемещает курсор этого WriteStream относительно его текущего положения.

writeStream.rows

Добавлен в: v0.7.7

number, указывающий количество строк, имеющихся в данный момент в TTY. Это свойство обновляется всякий раз, когда возникает событие 'resize'.

tty.isatty(fd)

Добавлен в: v0.5.8

  • fd <number> Числовой дескриптор файла
  • Возвращает: <boolean>

Метод tty.isatty() возвращает true, если данный fd связан с TTY, и false, если нет, включая случаи, когда fd не является неотрицательным целым числом.