TTY#

安定性: 2 - Stable

ソースコード: lib/tty.js

node:tty モジュールは tty.ReadStreamtty.WriteStream クラスを提供します。ほとんどの場合、このモジュールを直接使用する必要も可能性もありません。しかし、以下のようにしてアクセスできます。

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

Node.js は、テキスト端末 (「TTY」) に接続して実行されていることを検出すると、デフォルトで process.stdintty.ReadStream のインスタンスとして初期化され、process.stdoutprocess.stderr は両方とも tty.WriteStream のインスタンスになります。Node.js が TTY コンテキスト内で実行されているかどうかを判断するための推奨される方法は、process.stdout.isTTY プロパティの値が true であることを確認することです。

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

ほとんどの場合、アプリケーションが tty.ReadStreamtty.WriteStream クラスのインスタンスを手動で作成する必要性はほとんど、あるいは全くありません。

クラス: tty.ReadStream#

TTY の読み込み可能な側を表します。通常の状況では、process.stdin が Node.js プロセス内で唯一の tty.ReadStream インスタンスとなり、追加のインスタンスを作成する理由はありません。

readStream.isRaw#

TTY が現在 raw デバイスとして動作するように設定されている場合は true となる boolean 値です。

このフラグは、たとえ端末が raw モードで動作していても、プロセスの開始時には常に false です。その値は、その後の setRawMode の呼び出しによって変化します。

readStream.isTTY#

tty.ReadStream インスタンスに対して常に true となる boolean 値です。

readStream.setRawMode(mode)#

  • mode <boolean> true の場合、tty.ReadStream を raw デバイスとして動作するように設定します。false の場合、tty.ReadStream をデフォルトモードで動作するように設定します。readStream.isRaw プロパティは結果のモードに設定されます。
  • 戻り値: <this> read stream インスタンス。

tty.ReadStream を raw デバイスとして動作するように設定できます。

raw モードでは、入力は修飾キーを含まず、常に文字単位で利用可能になります。さらに、入力文字のエコーを含む、端末による文字の特別な処理はすべて無効になります。このモードでは Ctrl+C を押しても SIGINT は発生しなくなります。

クラス: tty.WriteStream#

TTY の書き込み可能な側を表します。通常の状況では、process.stdoutprocess.stderr が Node.js プロセス用に作成される唯一の tty.WriteStream インスタンスとなり、追加のインスタンスを作成する理由はありません。

new tty.ReadStream(fd[, options])#

TTY に関連付けられた fd のための ReadStream を作成します。

new tty.WriteStream(fd)#

TTY に関連付けられた fd のための WriteStream を作成します。

イベント: 'resize'#

'resize' イベントは writeStream.columns または writeStream.rows プロパティのいずれかが変更されたときに発行されます。呼び出されるとき、リスナーコールバックに引数は渡されません。

process.stdout.on('resize', () => {
  console.log('screen size has changed!');
  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
}); 

writeStream.clearLine(dir[, callback])#

  • dir <number>
    • -1: カーソルから左側
    • 1: カーソルから右側
    • 0: 行全体
  • callback <Function> 操作が完了したときに一度だけ呼び出されます。
  • 戻り値: <boolean> ストリームが、追加のデータを書き込み続ける前に 'drain' イベントが発行されるのを呼び出し元コードに待機させたい場合は false。それ以外の場合は true

writeStream.clearLine() は、dir で指定された方向にあるこの WriteStream の現在の行をクリアします。

writeStream.clearScreenDown([callback])#

  • callback <Function> 操作が完了したときに一度だけ呼び出されます。
  • 戻り値: <boolean> ストリームが、追加のデータを書き込み続ける前に 'drain' イベントが発行されるのを呼び出し元コードに待機させたい場合は false。それ以外の場合は true

writeStream.clearScreenDown() は、この WriteStream を現在のカーソル位置から下までクリアします。

writeStream.columns#

TTY が現在持っている列数を指定する number 値です。このプロパティは 'resize' イベントが発行されるたびに更新されます。

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

  • x <number>
  • y <number>
  • callback <Function> 操作が完了したときに一度だけ呼び出されます。
  • 戻り値: <boolean> ストリームが、追加のデータを書き込み続ける前に 'drain' イベントが発行されるのを呼び出し元コードに待機させたい場合は false。それ以外の場合は true

writeStream.cursorTo() は、この WriteStream のカーソルを指定された位置に移動します。

writeStream.getColorDepth([env])#

  • env <Object> チェックする環境変数を含むオブジェクト。これにより、特定の端末の使用をシミュレートできます。デフォルト: process.env
  • 戻り値: <number>

戻り値

  • 2 色の場合は 1
  • 16 色の場合は 4
  • 256 色の場合は 8
  • 16,777,216 色がサポートされている場合は 24

これを使用して、端末がサポートする色を判断します。端末での色の性質上、偽陽性 (false positive) または偽陰性 (false negative) のいずれかになる可能性があります。それは、どの端末が使用されているかについて誤った情報を提供する可能性のあるプロセス情報と環境変数に依存します。特定の端末の使用をシミュレートするために 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()#

writeStream.getWindowSize() は、この WriteStream に対応する TTY のサイズを返します。配列は [numColumns, numRows] の型であり、numColumnsnumRows は対応する TTY の列数と行数を表します。

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

  • count <integer> 要求される色の数 (最小 2)。デフォルト: 16。
  • env <Object> チェックする環境変数を含むオブジェクト。これにより、特定の端末の使用をシミュレートできます。デフォルト: process.env
  • 戻り値: <boolean>

writeStreamcount で指定された数以上の色をサポートしている場合は true を返します。最小サポートは 2 (白黒) です。

これには、writeStream.getColorDepth() で説明されているのと同じ偽陽性と偽陰性があります。

process.stdout.hasColors();
// Returns true or false depending on if `stdout` supports at least 16 colors.
process.stdout.hasColors(256);
// Returns true or false depending on if `stdout` supports at least 256 colors.
process.stdout.hasColors({ TMUX: '1' });
// Returns true.
process.stdout.hasColors(2 ** 24, { TMUX: '1' });
// Returns false (the environment setting pretends to support 2 ** 8 colors). 

writeStream.isTTY#

常に true となる boolean 値です。

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

  • dx <number>
  • dy <number>
  • callback <Function> 操作が完了したときに一度だけ呼び出されます。
  • 戻り値: <boolean> ストリームが、追加のデータを書き込み続ける前に 'drain' イベントが発行されるのを呼び出し元コードに待機させたい場合は false。それ以外の場合は true

writeStream.moveCursor() は、この WriteStream のカーソルを現在の位置から*相対的*に移動します。

writeStream.rows#

TTY が現在持っている行数を指定する number 値です。このプロパティは 'resize' イベントが発行されるたびに更新されます。

tty.isatty(fd)#

tty.isatty() メソッドは、指定された fd が TTY に関連付けられている場合は true を返し、そうでない場合 (fd が非負整数でない場合を含む) は false を返します。