Skip to content

TTY

[Stable: 2 - Stable]

Стабильно: 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 для работы в качестве необработанного устройства. Если false, конфигурирует tty.ReadStream для работы в режиме по умолчанию. Свойство readStream.isRaw будет установлено в полученный режим.
  • Возвращает: <this> Экземпляр потока чтения.

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

В необработанном режиме ввод всегда доступен посимвольно, без учета модификаторов. Кроме того, вся специальная обработка символов терминалом отключена, включая эхо-отображение вводимых символов. + больше не будет вызывать 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

Создает 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 не является неотрицательным целым числом.