2016-03-31 4 views
1

NodeのREPLのプロンプトをREPL内のテキストで変更しようとしています。REPL内からREPLプロンプトを変更する

私の元の試みは、このようなものでした。

import repl from 'repl' 

let PROMPT = 'original > ' 

repl.start({ 
    ignoreUndefined: true, 
    prompt: PROMPT, 
    eval: (text, context, filename, callback) => { 
    PROMPT = `${text} >` 
    return callback() 
    } 
}) 

プロセスの開始時にreplのプロンプトが設定されているため、これはうまくいかないことに気付きました。

私はこのようなことを思いつきました。これは、コマンドを入力した後に新しいプロンプトで新しいreplを開始します。

import repl from 'repl' 

let PROMPT = 'original > ' 
let REPL = createRepl(PROMPT) 

function createRepl (prompt) { 
    return repl.start({ 
    ignoreUndefined: true, 
    prompt: PROMPT, 
    eval: (text, context, filename, callback) => { 
     PROMPT = `${text.replace(/\n/, '')} >` 
     REPL.close() 
     REPL = createRepl(PROMPT) 
    } 
    }) 
} 

この解決策はほとんどの場合、元のREPLを閉じるときにプロセスが終了するという問題があります。

私は単に、プロセスの開始後にスクリプト内からREPLプロンプトを変更しようとしています。私はこれを行うために任意の手段に開放されています。理想的にはpromptの小道具はpromptという引数を持つ関数を受け取り、それを関数内から設定することができれば、イベントなどを使うことができます。

答えて

3

プロンプトを変更するには、repl.setPrompt('foo> ');に電話する必要があります。

+0

:: facepalm ::ありがとうございました! – ThomasReggi