{
  "source": "doc/api/readline.markdown",
  "modules": [
    {
      "textRaw": "Readline",
      "name": "readline",
      "stability": 3,
      "stabilityText": "Stable",
      "desc": "<p>To use this module, do <code>require(&apos;readline&apos;)</code>. Readline allows reading of a\nstream (such as STDIN) on a line-by-line basis.\n\n</p>\n<p>Note that once you&apos;ve invoked this module, your node program will not\nterminate until you&apos;ve paused the interface. Here&apos;s how to allow your\nprogram to gracefully pause:\n\n</p>\n<pre><code>var rl = require(&apos;readline&apos;);\n\nvar i = rl.createInterface(process.stdin, process.stdout, null);\ni.question(&quot;What do you think of node.js?&quot;, function(answer) {\n  // TODO: Log the answer in a database\n  console.log(&quot;Thank you for your valuable feedback.&quot;);\n\n  i.pause();\n});</code></pre>\n",
      "methods": [
        {
          "textRaw": "rl.createInterface(input, output, completer)",
          "type": "method",
          "name": "createInterface",
          "desc": "<p>Takes two streams and creates a readline interface. The <code>completer</code> function\nis used for autocompletion. When given a substring, it returns <code>[[substr1,\nsubstr2, ...], originalsubstring]</code>.\n\n</p>\n<p>Also <code>completer</code> can be run in async mode if it accepts two arguments:\n\n</p>\n<p>  function completer(linePartial, callback) {\n    callback(null, [[&apos;123&apos;], linePartial]);\n  }\n\n</p>\n<p><code>createInterface</code> is commonly used with <code>process.stdin</code> and\n<code>process.stdout</code> in order to accept user input:\n\n</p>\n<pre><code>var readline = require(&apos;readline&apos;),\n  rl = readline.createInterface(process.stdin, process.stdout);</code></pre>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "input"
                },
                {
                  "name": "output"
                },
                {
                  "name": "completer"
                }
              ]
            }
          ]
        }
      ],
      "classes": [
        {
          "textRaw": "Class: Interface",
          "type": "class",
          "name": "Interface",
          "desc": "<p>The class that represents a readline interface with a stdin and stdout\nstream.\n\n</p>\n",
          "methods": [
            {
              "textRaw": "rl.setPrompt(prompt, length)",
              "type": "method",
              "name": "setPrompt",
              "desc": "<p>Sets the prompt, for example when you run <code>node</code> on the command line, you see\n<code>&gt; </code>, which is node&apos;s prompt.\n\n</p>\n",
              "signatures": [
                {
                  "params": [
                    {
                      "name": "prompt"
                    },
                    {
                      "name": "length"
                    }
                  ]
                }
              ]
            },
            {
              "textRaw": "rl.prompt()",
              "type": "method",
              "name": "prompt",
              "desc": "<p>Readies readline for input from the user, putting the current <code>setPrompt</code>\noptions on a new line, giving the user a new spot to write.\n\n</p>\n<p>This will also resume the <code>in</code> stream used with <code>createInterface</code> if it has\nbeen paused.\n\n</p>\n",
              "signatures": [
                {
                  "params": []
                }
              ]
            },
            {
              "textRaw": "rl.question(query, callback)",
              "type": "method",
              "name": "question",
              "desc": "<p>Prepends the prompt with <code>query</code> and invokes <code>callback</code> with the user&apos;s\nresponse. Displays the query to the user, and then invokes <code>callback</code> with the\nuser&apos;s response after it has been typed.\n\n</p>\n<p>This will also resume the <code>in</code> stream used with <code>createInterface</code> if it has\nbeen paused.\n\n</p>\n<p>Example usage:\n\n</p>\n<pre><code>interface.question(&apos;What is your favorite food?&apos;, function(answer) {\n  console.log(&apos;Oh, so your favorite food is &apos; + answer);\n});</code></pre>\n",
              "signatures": [
                {
                  "params": [
                    {
                      "name": "query"
                    },
                    {
                      "name": "callback"
                    }
                  ]
                }
              ]
            },
            {
              "textRaw": "rl.pause()",
              "type": "method",
              "name": "pause",
              "desc": "<p>Pauses the readline <code>in</code> stream, allowing it to be resumed later if needed.\n\n</p>\n",
              "signatures": [
                {
                  "params": []
                }
              ]
            },
            {
              "textRaw": "rl.resume()",
              "type": "method",
              "name": "resume",
              "desc": "<p>Resumes the readline <code>in</code> stream.\n\n</p>\n",
              "signatures": [
                {
                  "params": []
                }
              ]
            },
            {
              "textRaw": "rl.write()",
              "type": "method",
              "name": "write",
              "desc": "<p>Writes to tty.\n\n</p>\n<p>This will also resume the <code>in</code> stream used with <code>createInterface</code> if it has\nbeen paused.\n\n</p>\n",
              "signatures": [
                {
                  "params": []
                }
              ]
            }
          ],
          "events": [
            {
              "textRaw": "Event: 'line'",
              "type": "event",
              "name": "line",
              "desc": "<p><code>function (line) {}</code>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream receives a <code>\\n</code>, usually received when the\nuser hits enter, or return. This is a good hook to listen for user input.\n\n</p>\n<p>Example of listening for <code>line</code>:\n\n</p>\n<pre><code>rl.on(&apos;line&apos;, function (cmd) {\n  console.log(&apos;You just typed: &apos;+cmd);\n});</code></pre>\n",
              "params": []
            },
            {
              "textRaw": "Event: 'pause'",
              "type": "event",
              "name": "pause",
              "desc": "<p><code>function () {}</code>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream is paused or receives <code>^D</code>, respectively known\nas <code>EOT</code>. This event is also called if there is no <code>SIGINT</code> event listener\npresent when the <code>in</code> stream receives a <code>^C</code>, respectively known as <code>SIGINT</code>.\n\n</p>\n<p>Also emitted whenever the <code>in</code> stream is not paused and receives the <code>SIGCONT</code>\nevent. (See events <code>SIGTSTP</code> and <code>SIGCONT</code>)\n\n</p>\n<p>Example of listening for <code>pause</code>:\n\n</p>\n<pre><code>rl.on(&apos;pause&apos;, function() {\n  console.log(&apos;Readline paused.&apos;);\n});</code></pre>\n",
              "params": []
            },
            {
              "textRaw": "Event: 'resume'",
              "type": "event",
              "name": "resume",
              "desc": "<p><code>function () {}</code>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream is resumed.\n\n</p>\n<p>Example of listening for <code>resume</code>:\n\n</p>\n<pre><code>rl.on(&apos;resume&apos;, function() {\n  console.log(&apos;Readline resumed.&apos;);\n});</code></pre>\n",
              "params": []
            },
            {
              "textRaw": "Event: 'SIGINT'",
              "type": "event",
              "name": "SIGINT",
              "desc": "<p><code>function () {}</code>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream receives a <code>^C</code>, respectively known as\n<code>SIGINT</code>. If there is no <code>SIGINT</code> event listener present when the <code>in</code> stream\nreceives a <code>SIGINT</code>, <code>pause</code> will be triggered.\n\n</p>\n<p>Example of listening for <code>SIGINT</code>:\n\n</p>\n<pre><code>rl.on(&apos;SIGINT&apos;, function() {\n  rl.question(&apos;Are you sure you want to exit?&apos;, function(answer) {\n    if (answer.match(/^y(es)?$/i)) rl.pause();\n  });\n});</code></pre>\n",
              "params": []
            },
            {
              "textRaw": "Event: 'SIGTSTP'",
              "type": "event",
              "name": "SIGTSTP",
              "desc": "<p><code>function () {}</code>\n\n</p>\n<p><strong>This does not work on Windows.</strong>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream receives a <code>^Z</code>, respectively known as\n<code>SIGTSTP</code>. If there is no <code>SIGTSTP</code> event listener present when the <code>in</code> stream\nreceives a <code>SIGTSTP</code>, the program will be sent to the background.\n\n</p>\n<p>When the program is resumed with <code>fg</code>, the <code>pause</code> and <code>SIGCONT</code> events will be\nemitted. You can use either to resume the stream.\n\n</p>\n<p>The <code>pause</code> and <code>SIGCONT</code> events will not be triggered if the stream was paused\nbefore the program was sent to the background.\n\n</p>\n<p>Example of listening for <code>SIGTSTP</code>:\n\n</p>\n<pre><code>rl.on(&apos;SIGTSTP&apos;, function() {\n  // This will override SIGTSTP and prevent the program from going to the\n  // background.\n  console.log(&apos;Caught SIGTSTP.&apos;);\n});</code></pre>\n",
              "params": []
            },
            {
              "textRaw": "Event: 'SIGCONT'",
              "type": "event",
              "name": "SIGCONT",
              "desc": "<p><code>function () {}</code>\n\n</p>\n<p><strong>This does not work on Windows.</strong>\n\n</p>\n<p>Emitted whenever the <code>in</code> stream is sent to the background with <code>^Z</code>,\nrespectively known as <code>SIGTSTP</code>, and then continued with <code>fg</code>. This event only\nemits if the stream was not paused before sending the program to the\nbackground.\n\n</p>\n<p>Example of listening for <code>SIGCONT</code>:\n\n</p>\n<pre><code>rl.on(&apos;SIGCONT&apos;, function() {\n  // `prompt` will automatically resume the stream\n  rl.prompt();\n});</code></pre>\n<p>Here&apos;s an example of how to use all these together to craft a tiny command\nline interface:\n\n</p>\n<pre><code>var readline = require(&apos;readline&apos;),\n    rl = readline.createInterface(process.stdin, process.stdout);\n\nrl.setPrompt(&apos;OHAI&gt; &apos;);\nrl.prompt();\n\nrl.on(&apos;line&apos;, function(line) {\n  switch(line.trim()) {\n    case &apos;hello&apos;:\n      console.log(&apos;world!&apos;);\n      break;\n    default:\n      console.log(&apos;Say what? I might have heard `&apos; + line.trim() + &apos;`&apos;);\n      break;\n  }\n  rl.prompt();\n}).on(&apos;pause&apos;, function() {\n  console.log(&apos;Have a great day!&apos;);\n  process.exit(0);\n});</code></pre>\n",
              "params": []
            }
          ]
        }
      ],
      "type": "module",
      "displayName": "Readline"
    }
  ]
}
