Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change REPL prompt from within the REPL

I'm trying to change the prompt for Node's REPL with text given inside the REPL.

My original attempt was something like this.

import repl from 'repl'

let PROMPT = 'original > '

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

I realized this isn't gonna work because the prompt for the repl is set when the process starts.

I came up with something like this, which starts a new repl with a new prompt after ever entered command.

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)
    }
  })
}

This solution is almost there the issue is that the process is exiting when I close the original REPL.

I'm simply trying to change the REPL prompt from inside the script after the process starts. I'm open to any means to do this. Ideally the prompt prop took a function with the prompt argument and allowed you to set it from within the function, then I could use an event or something else.

like image 416
ThomasReggi Avatar asked Feb 07 '23 08:02

ThomasReggi


1 Answers

You should be able to call repl.setPrompt('foo> '); to change the prompt.

like image 156
mscdex Avatar answered Feb 11 '23 01:02

mscdex