readline
readlineモジュールは、JSHアプリケーションで対話的な行入力を処理します。
JSHのネイティブreadline実装をラップする、ReadLineクラスを提供します。
一般的な使用方法は以下のとおりです。
const { ReadLine } = require('readline');ReadLine
対話型の行リーダーを作成します。
構文
new ReadLine([options])オプション
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| history | String | readline | JSHの設定ディレクトリに保存する履歴ファイルの名前です。 |
| prompt | Function | 組み込みプロンプト | 各行に表示するプロンプト文字列を返すコールバックです。 |
| submitOnEnterWhen | Function | 常に確定 | Enterキーで現在の入力を確定するかどうかを決めるコールバックです。 |
| autoInput | String[] | 主に自動テストで使用する入力シーケンスです。 |
promptを省略すると、最初の行は> 、2行目以降は. 形式の継続プロンプトを使用します。
historyを省略すると、既定の履歴ファイル名はreadlineになります。
historyオプションはパスではなくファイル名として扱い、実際の履歴ファイルは$HOME/.config/.jsh/に保存します。historyにはファイル名だけを指定し、ディレクトリ区切り文字を含めないでください。
使用例
| |
readLine()
1つの論理的な入力値を読み取ります。
- 単一行の入力では、1つの文字列を返します。
- 複数行の入力では、各行を
\nで連結した文字列を返します。 - ネイティブリーダーがエラーで終了すると、JSHは
Errorオブジェクトを返します。
構文
reader.readLine([options])readLine()は、コンストラクターと同じ形式のオプションを受け取ります。
呼び出し時のオプションが、コンストラクターのオプションより優先されます。
使用例
| |
addHistory()
readlineの履歴に1行を追加します。
構文
reader.addHistory(line)同じ内容の行がある場合は、既存の項目を削除してから末尾に再追加します。
使用例
| |
close()
現在のreadlineセッションを終了します。
構文
reader.close()readLine()が入力待ちの間にclose()を呼び出すと、待機中の呼び出しはEOFで終了します。
使用例
| |
prompt オプション
promptは、各行のプロンプト文字列を生成します。
シグネチャ
prompt(lineno) => stringlinenoは0から始まります。- その行に表示するプロンプト文字列をそのまま返します。
使用例
| |
submitOnEnterWhen オプション
submitOnEnterWhenは、Enterキーで現在の入力を確定するか、複数行の編集を続けるかを決めます。
シグネチャ
submitOnEnterWhen(lines, idx) => booleanlinesは、現在までの行の配列です。idxは、現在の行インデックスです。trueを返すと確定し、falseを返すと編集を続けます。
使用例
| |
autoInput オプション
autoInputは、用意した入力をリーダーに渡します。
主にテストと非対話型スクリプトに使用します。
使用例
| |
複数行入力の例
submitOnEnterWhenは、現在の行がアプリケーションの規則を満たすまで編集を続けるためによく使用します。
| |
静的なキー定数
ReadLineは、入力のシミュレーションやキー処理に使用できるさまざまなキー定数を提供します。
代表的な定数は以下のとおりです。
- Controlキー:
CtrlA…CtrlZ,CtrlLeft,CtrlRight,CtrlUp,CtrlDown - 移動キー:
Up,Down,Left,Right,Home,End,PageUp,PageDown - 編集キー:
Backspace,Delete,Enter,ShiftTab,Escape - Altキー:
AltA…AltZ,ALTBackspace - ファンクションキー:
F1…F24
名前の全一覧は、ReadLineの静的プロパティを参照してください。
使用例
| |
動作に関する注意
- JavaScriptレベルでは、コールバックを使わず同期的に読み取ります。
readLine()は、確定した値を直接返します。 - 実際の行編集、カーソル移動、履歴、複数行入力は、ネイティブバックエンドが処理します。
readLine()はErrorオブジェクトを返す場合があるため、失敗を明示的に処理する場合はline instanceof Errorを確認してください。close()は、タイマーや他のイベントから入力待ちを中断する場合に主に使用します。