コンテンツにスキップ

REPL (Read-Eval-Print Loop)

KRKRZ_REPL=ON でビルドされたバイナリにコマンドライン引数 -repl ( または -repl=yes ) を付けて起動すると、対話型 TJS シェルが有効に なります。Windows / macOS / Linux 対応。行編集は icline ( isocline フォーク ) を 利用しています。

詳細な仕様 ( コマンド一覧・編集機能・トラブルシューティング ) は src/core 側のガイドを参照:


起動

krkrz -repl data/      # SDL 版
krkrz64 -repl data/    # Win32 版 (親コンソールに AttachConsole)

-repl が無ければ REPL は起動しません ( TTY 自動判定はありません )。 -repl=no / -repl=off / -repl=false / -repl=0 で明示的に無効化も可能。

KRKRZ_REPL_LINE_EDIT=OFF でビルドすれば icline 依存なしの最小モードで ビルドできます ( 矢印キー等の行編集機能は無効 )。


主な特殊コマンド

プロンプトは krkrz>、継続行は ...。TJS の式や文をそのまま入力でき、 履歴は .krkrz_history に保存されます。

コマンド 説明
exit / quit / Ctrl+D REPL を抜けてアプリを終了
.help ヘルプ表示
.mem アロケータ + プロセスメモリの 1 行サマリ
.memdump 詳細メモリ統計をログへダンプ
.memoverlay [on\|off] 画面オーバレイの切替 ( SDL3 ビルド )
.mempeakclear peak 計測値を current_used に揃え直す
.sysalloc システムアロケータ情報 ( 空き / 確保可能 / RSS ) を 1 行表示
.padoverlay [on\|off] パッドオーバレイの切替 ( SDL3 ビルド )
.filecache StorageCache ( file 層 ) 全エントリをログへダンプ
.imagecache TVPGraphicCache ( decode 層 ) 全エントリをログへダンプ
.cap [path] 次フレームの実画面 ( overlay 込み ) を PNG 保存
.dlg アクティブダイアログ一覧
.dlgclose 最前面ダイアログを閉じる
.click <index> <id> id 指定の widget を起動 ( Enter 相当 )

メモリ系コマンドの詳細は メモリ観測ガイド、パッド オーバレイの詳細は PadOverlay を参照してください。


REPL 起動中のエラーハンドラ動作

-repl または -replfile で REPL が有効なときは、未捕捉例外で吉里吉里 が即終了しなくなります。例外発生時はネイティブダイアログを表示せず、 スタックトレース付きでログ出力するだけに留まり、修正して再 eval できる ようになります。同様に System.informApplication::MessageDlg の 出力先は REPL コンソールへ振り替えられ ( 既定応答だけ返してダイアログは 出さない )、ヘッドレスな自動テストでも止まりません。

-nostartup を併用すると startup.tjs の自動実行も抑止できるので、 ウィンドウ無しで静止起動 → REPL から明示的に処理を起動、という流れが 組めます ( 詳細は コマンドラインオプション-nostartup を参照 )。


ファイルチャネル ( -replfile )

-replfile=<dir> を指定すると、コンソールを介さずファイルベースの REPL チャネルが起動します。外部エージェントは指定ディレクトリ内の コマンドファイルを書き込んで TJS 式を投げ、応答ファイルから結果 JSON を読み取ります ( lockstep )。-repl と独立に有効化でき、両方同時に 利用しても構いません。

krkrz -replfile=./replbus data/

ヘッドレスな自動テストや、別プロセスのエージェントから krkrz を制御 する用途を想定しています。プロトコル詳細は src/core 側のドキュメントを 参照してください。


ソケットチャネル ( -replsocket / Linux 系限定 )

-replsocket=<name> ( または環境変数 KRKRZ_REPL_SOCKET ) を指定すると、 abstract namespace の Unix ドメインソケットを listen するコマンドチャネルが 起動します ( Linux 系ビルド限定。他 OS では無視されます )。ファイルチャネル のソケット版で、1 行 = 1 コマンド ( TJS 式 ) を受け取り、メインスレッドで 実行して 1 行 JSON で応答します。-repl / -replfile とは独立に起動でき、 同時利用も可能です。

  • 行末に \ を置くと継続行として扱われ、改行を保ったまま複数行を 1 コマンドとして実行できます ( nc などからも使えるワイヤ上の継続 マーカーです )。
  • 単一行の先頭が . のものはチャネル側の dot コマンドとして解釈されます ( .help / .depth / .compact )。

エージェント駆動用 Agent クラス ( SDL3 ビルド )

KRKRZ_REPL ビルドの SDL3 版には、外部エージェント / 自動テストから krkrz を駆動するための Agent TJS クラスが組み込まれています。System クラスと同じくクラスメソッド として呼び出します ( インスタンス化不要 )。

機能 API ( 主要メソッド )
入力注入 Agent.mouseMove / mouseDown / mouseUp / click / wheelAgent.keyDown / keyUp / keyPressAgent.text
ダイアログ観察 / 制御 Agent.dialogs() / Agent.dialogTree(index) / Agent.dialogClick(index, id) / Agent.dialogFocus(index, id) / Agent.closeDialog() / Agent.closeAllDialogs()
画面キャプチャ Agent.captureScreen(path[, x, y, w, h]) / Agent.lastCapture()

Agent 経由の入力は実入力と同じ TTVPWindowForm::Send* 経路を通るので、 ゲームにも Dialog にも届きます。 captureScreen は overlay 込みの実画面を次フレームの present 直前に 読み戻して PNG 保存します ( 要求した時点でアイドルでも 1 フレーム後に 保存される )。

クラスは KRKRZ_REPL=ON の SDL3 ビルドでのみ登録されます。仕様の詳細 ( ボタン定数、shift マスク、ファイルチャネルのプロトコル等 ) は doc/REPL.md を参照してください。