TTY#

穩定性:2 - 穩定

原始碼: lib/tty.js

node:tty 模組提供了 tty.ReadStreamtty.WriteStream 類。在大多數情況下,沒有必要或可能直接使用此模組。但是,可以使用以下方式訪問它:

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

當 Node.js 檢測到它在連線了文字終端("TTY")的情況下執行時,process.stdin 預設會被初始化為 tty.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#

一個 boolean 值,如果 TTY 當前配置為作為原始裝置執行,則為 true

即使終端在原始模式下執行,此標誌在程序啟動時也始終為 false。其值會隨著後續對 setRawMode 的呼叫而改變。

readStream.isTTY#

一個 boolean 值,對於 tty.ReadStream 例項始終為 true

readStream.setRawMode(mode)#

  • mode <boolean> 如果為 true,則將 tty.ReadStream 配置為作為原始裝置執行。如果為 false,則將 tty.ReadStream 配置為其預設模式執行。readStream.isRaw 屬性將被設定為最終的模式。
  • 返回: <this> 讀取流例項。

允許配置 tty.ReadStream,使其作為原始裝置執行。

當處於原始模式時,輸入總是逐個字元可用,不包括修飾符。此外,終端對字元的所有特殊處理都被停用,包括回顯輸入字元。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'#

每當 writeStream.columnswriteStream.rows 屬性發生變化時,就會觸發 'resize' 事件。呼叫時不會向監聽器回撥函式傳遞任何引數。

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#

一個 number,指定 TTY 當前的列數。此屬性在 '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>

返回

  • 1 表示 2 色,
  • 4 表示 16 色,
  • 8 表示 256 色,
  • 24 表示支援 16,777,216 色。

用此方法確定終端支援的顏色。由於終端中顏色的特性,可能會出現假陽性(false positive)或假陰性(false negative)。這取決於程序資訊和可能謊報所用終端的環境變數。可以傳入一個 env 物件來模擬特定終端的使用。這對於檢查特定環境設定的行為很有用。

要強制執行特定的顏色支援,請使用以下環境設定之一。

  • 2 色: FORCE_COLOR = 0 (停用顏色)
  • 16 色: FORCE_COLOR = 1
  • 256 色: FORCE_COLOR = 2
  • 16,777,216 色: FORCE_COLOR = 3

也可以透過使用 NO_COLORNODE_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>

如果 writeStream 支援的顏色數量至少與 count 中提供的一樣多,則返回 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#

一個 boolean 值,始終為 true

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

  • dx <number>
  • dy <number>
  • callback <Function> 操作完成後呼叫。
  • 返回: <boolean> 如果流希望呼叫程式碼在繼續寫入更多資料之前等待 'drain' 事件觸發,則為 false;否則為 true

writeStream.moveCursor() 將此 WriteStream 的游標相對於其當前位置移動。

writeStream.rows#

一個 number,指定 TTY 當前的行數。此屬性在 'resize' 事件觸發時更新。

tty.isatty(fd)#

如果給定的 fd 與 TTY 相關聯,則 tty.isatty() 方法返回 true,否則返回 false,包括當 fd 不是非負整數時。