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#

如果 TTY 目前設定為以原始裝置模式運作,則為 trueboolean

即使終端機以原始模式運作,這個旗標在程序啟動時仍會永遠為 false。它的值會隨著後續呼叫 setRawMode 而改變。

readStream.isTTY#

tty.ReadStream 執行個體永遠為 trueboolean

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 執行個體,而且沒有理由建立其他執行個體。

事件:'resize'#

'resize' 事件會在 writeStream.columnswriteStream.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> false 如果串流希望呼叫碼在繼續寫入其他資料前等待發出 'drain' 事件;否則為 true

writeStream.clearLine() 清除此 WriteStream 的目前行,方向由 dir 識別。

writeStream.clearScreenDown([callback])#

  • callback <Function> 在作業完成後呼叫。
  • 傳回:<boolean> false 如果串流希望呼叫碼在繼續寫入其他資料前等待發出 'drain' 事件;否則為 true

writeStream.clearScreenDown() 從目前游標向下清除此 WriteStream

writeStream.columns#

一個指定 TTY 目前欄位的 數字。當發出 'resize' 事件時,此屬性會更新。

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

  • x <數字>
  • y <數字>
  • callback <Function> 在作業完成後呼叫。
  • 傳回:<boolean> false 如果串流希望呼叫碼在繼續寫入其他資料前等待發出 'drain' 事件;否則為 true

writeStream.cursorTo() 將此 WriteStream 的游標移至指定位置。

writeStream.getColorDepth([env])#

  • env <物件> 包含要檢查的環境變數的物件。這能模擬特定終端的用法。預設:process.env
  • 傳回:<數字>

傳回

  • 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_COLORNODE_DISABLE_COLORS 環境變數來停用色彩支援。

writeStream.getWindowSize()#

writeStream.getWindowSize() 傳回對應這個 WriteStream 的 TTY 大小。陣列類型為 [numColumns, numRows],其中 numColumnsnumRows 分別代表對應 TTY 中的欄數和列數。

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

  • count <integer> 要求的色彩數量(最少 2)。預設值:16。
  • env <物件> 包含要檢查的環境變數的物件。這能模擬特定終端的用法。預設: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#

一個永遠為 trueboolean

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

  • dx <number>
  • dy <number>
  • callback <Function> 在作業完成後呼叫。
  • 傳回:<boolean> false 如果串流希望呼叫碼在繼續寫入其他資料前等待發出 'drain' 事件;否則為 true

writeStream.moveCursor() 將這個 WriteStream 的游標相對於其目前位置移動

writeStream.rows#

指定 TTY 目前所具有的列數的 數字。此屬性會在發出 'resize' 事件時更新。

tty.isatty(fd)#

如果給定的 fd 與 TTY 關聯,則 tty.isatty() 方法會傳回 true;如果沒有關聯,則傳回 false,包括 fd 不是非負整數時。