Skip to content

Commit

Permalink
doc: document readline key bindings
Browse files Browse the repository at this point in the history
This documents all readline key bindings. It is a rework of
#20825

PR-URL: #31256
Fixes: #20814
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
  • Loading branch information
HarshithaKP authored and BridgeAR committed Jan 13, 2020
1 parent 94549be commit 027eaac
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 1 deletion.
129 changes: 128 additions & 1 deletion doc/api/readline.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,8 @@ added: v0.1.98

The `rl.write()` method will write either `data` or a key sequence identified
by `key` to the `output`. The `key` argument is supported only if `output` is
a [TTY][] text terminal.
a [TTY][] text terminal. See [TTY keybindings][] for a list of key
combinations.

If `key` is specified, `data` is ignored.

Expand Down Expand Up @@ -722,6 +723,131 @@ const { createInterface } = require('readline');
})();
```

## TTY keybindings

<table>
<tr>
<th>Keybindings</th>
<th>Description</th>
<th>Notes</th>
</tr>
<tr>
<td><code>ctrl</code> + <code>shift</code> + <code>backspace</code></td>
<td>Delete line left</td>
<td>Doesn't work on Linux, Mac and Windows</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>shift</code> + <code>delete</code></td>
<td>Delete line right</td>
<td>Doesn't work on Linux and Mac</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>c</code></td>
<td>Emit <code>SIGINT</code> or close the readline instance</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>h</code></td>
<td>Delete left</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>d</code></td>
<td>Delete right or close the readline instance in case the current line is empty / EOF</td>
<td>Doesn't work on Windows</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>u</code></td>
<td>Delete from the current position to the line start</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>k</code></td>
<td>Delete from the current position to the end of line</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>a</code></td>
<td>Go to start of line</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>e</code></td>
<td>Go to to end of line</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>b</code></td>
<td>Back one character</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>f</code></td>
<td>Forward one character</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>l</code></td>
<td>Clear screen</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>n</code></td>
<td>Next history item</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>p</code></td>
<td>Previous history item</td>
<td></td>
</tr>
<tr>
<td><code>ctrl</code> + <code>z</code></td>
<td>Moves running process into background. Type
<code>fg</code> and press <code>enter</code>
to return.</td>
<td>Doesn't work on Windows</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>w</code> or <code>ctrl</code>
+ <code>backspace</code></td>
<td>Delete backwards to a word boundary</td>
<td><code>ctrl</code> + <code>backspace</code> Doesn't
work as expected on Windows</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>delete</code></td>
<td>Delete forward to a word boundary</td>
<td>Doesn't work on Mac</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>left</code> or
<code>meta</code> + <code>b</code></td>
<td>Word left</td>
<td><code>ctrl</code> + <code>left</code> Doesn't work
on Mac</td>
</tr>
<tr>
<td><code>ctrl</code> + <code>right</code> or
<code>meta</code> + <code>f</code></td>
<td>Word right</td>
<td><code>ctrl</code> + <code>right</code> Doesn't work
on Mac</td>
</tr>
<tr>
<td><code>meta</code> + <code>d</code> or <code>meta</code>
+ <code>delete</code></td>
<td>Delete word right</td>
<td><code>meta</code> + <code>delete</code> Doesn't work
on windows</td>
</tr>
<tr>
<td><code>meta</code> + <code>backspace</code></td>
<td>Delete word left</td>
<td>Doesn't work on Mac</td>
</tr>
</table>

[`'SIGCONT'`]: readline.html#readline_event_sigcont
[`'SIGTSTP'`]: readline.html#readline_event_sigtstp
[`'line'`]: #readline_event_line
Expand All @@ -731,5 +857,6 @@ const { createInterface } = require('readline');
[`rl.close()`]: #readline_rl_close
[Readable]: stream.html#stream_readable_streams
[TTY]: tty.html
[TTY keybindings]: #readline_tty_keybindings
[Writable]: stream.html#stream_writable_streams
[reading files]: #readline_example_read_file_stream_line_by_line
5 changes: 5 additions & 0 deletions doc/api/repl.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ The following key combinations in the REPL have these special effects:
variables. When pressed while entering other input, displays relevant
autocompletion options.

For key bindings related to the reverse-i-search, see [`reverse-i-search`][].
For all other key bindings, see [TTY keybindings][].

### Default Evaluation

By default, all instances of [`repl.REPLServer`][] use an evaluation function
Expand Down Expand Up @@ -738,5 +741,7 @@ For an example of running a REPL instance over [curl(1)][], see:
[`repl.ReplServer`]: #repl_class_replserver
[`repl.start()`]: #repl_repl_start_options
[`util.inspect()`]: util.html#util_util_inspect_object_options
[`reverse-i-search`]: #repl_reverse_i_search
[TTY keybindings]: readline.html#readline_tty_keybindings
[curl(1)]: https://curl.haxx.se/docs/manpage.html
[stream]: stream.html

0 comments on commit 027eaac

Please sign in to comment.