improved the help page + added markdown style html formatting processor)

pull/111/merge
Ondřej Hruška 7 years ago
parent 6aa4747d3e
commit d2b2b89593
  1. 20
      html_orig/css/app.css
  2. 6
      html_orig/index.php
  3. 505
      html_orig/pages/help.php
  4. 2
      html_orig/sass/_normalize.scss
  5. 1
      html_orig/sass/layout/_box.scss
  6. 28
      html_orig/sass/pages/_about.scss

@ -165,7 +165,7 @@ pre {
code,
pre
{
font-family: monospace;
font-family: "DejaVu Sans Mono", "Inconsolata", monospace;
font-size: 1em; }
/* Forms
@ -573,6 +573,7 @@ ul {
.Box {
display: block;
max-width: 900px;
line-height: 1.35em;
margin-top: 1rem;
padding: 0.61805rem 1rem;
border-radius: 3px;
@ -1640,6 +1641,11 @@ body.term #botnav {
.page-about td {
white-space: normal; }
.page-help code {
background: rgba(33, 97, 109, 0.31);
border-radius: 1px;
padding: 0 2px; }
.colorprev {
margin-top: 0.38198rem;
margin-bottom: 0.38198rem; }
@ -1656,13 +1662,21 @@ body.term #botnav {
.Row table th {
background-color: rgba(255, 255, 255, 0.1); }
.ansiref td:nth-child(1) {
font-family: monospace; }
.ansiref.w100 {
width: 100%; }
.ansiref.w100 td:nth-child(1) {
width: 6em; }
.nomen {
width: 100%; }
.nomen code {
white-space: nowrap; }
.nomen td:last-child {
min-width: 15em; }
.tscroll {
overflow-x: auto; }
@media screen and (min-width: 545px) {
.mq-phone {
display: none !important; } }

@ -43,8 +43,12 @@ if (file_exists($_pf)) {
// special symbols
$str = str_replace('\,', ' ', $str);
$str = preg_replace('/(?<=\w)~(?=\w)/', '&nbsp;', $str);
$str = preg_replace('/(?<=[^ ])~(?=[^ ])/', '&nbsp;', $str);
$str = preg_replace('/(?<!\w)`([^ `][^`]*?[^ `]|[^ `])`(?!\w)/', '<code>$1</code>', $str);
$str = preg_replace('/(?<!\w)_([^ _][^_]*?[^ _]|[^ _])_(?!\w)/', '<i>$1</i>', $str);
$str = preg_replace('/(?<!\w)\*([^ *][^*]*?[^ *]|[^ *])\*(?!\w)/', '<b>$1</b>', $str);
$str = preg_replace("/\s*(\\\\\\\\)[\n \t]+/", '<br>', $str);
include_str($str);
} else {
echo "404";

@ -4,27 +4,27 @@
<div class="Row v">
<img src="/img/adapter.jpg" class="aside" alt="ESPTerm v2">
<ul>
<li><b>Communication UART (Rx, Tx)</b> can be configured in the <a href="<?= url('cfg_system') ?>">System Settings</a>.
<li>*Communication UART (Rx, Tx)* can be configured in the <a href="<?= url('cfg_system') ?>">System Settings</a>.
<li><b>Boot log and debug messages</b> are available on pin <b>GPIO2</b> (P2) at 115200\,baud, 1 stop bit, no parity.
<li>*Boot log and debug messages* are available on pin *GPIO2* (P2) at 115200\,baud, 1 stop bit, no parity.
Those messages may be disabled through compile flags.
<li><b>Loopback test</b>: Connect the Rx and Tx pins with a piece of wire. Anything you type in the browser should
appear on the screen. Set Parser Timeout = 0 in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>
<li>*Loopback test*: Connect the Rx and Tx pins with a piece of wire. Anything you type in the browser should
appear on the screen. Set _Parser Timeout = 0_ in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>
to be able to manually enter escape sequences.
<li>There is very little RAM available to the webserver, and it can support at most 4 connections at the same time.
Each terminal session (open window with the terminal screen) uses one persistent connection for screen updates.
<b>Avoid leaving unused windows open</b>, or either the RAM or connections may be exhausted.
*Avoid leaving unused windows open*, or either the RAM or connections may be exhausted.
<li><b>For best performance</b>, use the module in Client mode (connected to external network) and minimize the number
<li>*For best performance*, use the module in Client mode (connected to external network) and minimize the number
of simultaneous connections. Enabling AP consumes extra RAM because the DHCP server and Captive Portal
DNS server are started.
<li>In AP mode, <b>check that the WiFi channel used is clear</b>; interference may cause flaky connection.
<li>In AP mode, *check that the WiFi channel used is clear*; interference may cause flaky connection.
A good mobile app to use for this is
<a href="https://play.google.com/store/apps/details?id=com.farproc.wifi.analyzer">WiFi Analyzer (Google Play)</a>.
Adjust the hotspot strength and range using the Tx Power setting.
Adjust the hotspot strength and range using the _Tx Power setting_.
<li>Hold the BOOT button (GPIO0 to GND) for ~1 second to force enable AP. Hold it for ~6 seconds to restore default settings.
(This is indicated by the blue LED rapidly flashing). Default settings can be overwritten in the
@ -34,77 +34,87 @@
</div>
<div class="Box fold">
<h2>Escape Sequences Intro & Nomenclature</h2>
<h2>Basic Intro & Nomenclature</h2>
<div class="Row v">
<img src="/img/vt100.jpg" class="aside" alt="VT102">
<p>ESPTerm emulates VT102 (pictured) with some additions from later VT models and <code>xterm</code>.
<p>
ESPTerm emulates VT102 (pictured) with some additions from later VT models and Xterm.
All commonly used attributes and commands are supported.
ESPTerm is capable of displaying ncurses applications such as <i>Midnight Commander</i> using <i>agetty</i>.</p>
ESPTerm is capable of displaying ncurses applications such as _Midnight Commander_ using _agetty_.
</p>
<p>
ESPTerm accepts UTF-8 characters received on the communication UART and displays them on the screen,
interpreting some codes as Control Characters. Those are e.g. Carriage Return (13), Line Feed (10), Tab (9), Backspace (8) and Bell (7).
Escape sequences start with the control character ESC (27), followed by any number of ASCII characters
forming the body of the command.
interpreting some codes as Control Characters. Those are e.g. _Carriage Return_ (13), _Line Feed_ (10),
_Tab_ (9), _Backspace_ (8) and _Bell_ (7).
</p>
<p>
Escape sequences start with the control character _ESC_ (27),
followed by any number of ASCII characters forming the body of the command.
</p>
<h3>Nomenclature & Command Types</h3>
<p>Examples on this help page use the following symbols for special characters and command types:
(spaces are for clarity only, DO NOT include them in the commands!)</p>
<p>
Examples on this help page use the following symbols for special characters and command types:\\
(spaces are for clarity only, _DO NOT_ include them in the commands!)
</p>
<table>
<div class="tscroll">
<table class="nomen">
<thead><tr><th>Name</th><th>Symbol</th><th>ASCII</th><th>C string</th><th>Function</th></tr></thead>
<tbody>
<tr>
<td><b>ESC</b></td>
<td><code>\e</code></td>
<td><code>ESC (27)</code></td>
<td><code>"\e"</code>, <code>"\x1b"</code>, <code>"\033"</code></td>
<td>Introduces an escape sequence. <i>(Note: \e is a GCC extension)</i></td>
<td>*ESC*</td>
<td>`\e`</td>
<td>`ESC` (27)</td>
<td>`"\e"`, `"\x1b"`, `"\033"`</td>
<td>Introduces an escape sequence. _(Note: `\e` is a GCC extension)_</td>
</tr>
<tr>
<td><b>Bell</b></td>
<td><code>\a</code></td>
<td><code>BEL (7)</code></td>
<td><code>"\a"</code>, <code>"\x7"</code>, <code>"\07"</code></td>
<td>*Bell*</td>
<td>`\a`</td>
<td>`BEL`~(7)</td>
<td>`"\a"`, `"\x7"`, `"\07"`</td>
<td>Audible beep</td>
</tr>
<tr>
<td><b>String Terminator</b></td>
<td><code>ST</code></td>
<td><code>ESC \ (27 92)</code><br><i>or</i> <code>\a (7)</code><code></td>
<td></code>"\x1b\\"<code>, <code>"\a"</code></td>
<td>Terminates a string command (<code>\a</code> can be used as an alternative)</td>
<td>*String Terminator*</td>
<td>`ST`</td>
<td>`ESC \`~(27~92)<br>_or_~`\a`~(7)</td>
<td>`"\x1b\\"`, `"\a"`</td>
<td>Terminates a string command (`\a` can be used as an alternative)</td>
</tr>
<tr>
<td><b>Control Sequence Introducer</b></td>
<td><code>CSI</code></td>
<td><code>ESC [</code></td>
<td><code>"\x1b["</code></td>
<td>Starts a CSI command. Examples: <code>\e[?7;10h</code>, <code>\e[2J</code></td>
<td>*Control Sequence Introducer*</td>
<td>`CSI`</td>
<td>`ESC [`</td>
<td>`"\x1b["`</td>
<td>Starts a CSI command. Examples: `\e[?7;10h`, `\e[2J`</td>
</tr>
<tr>
<td><b>Operating System Command</b></td>
<td><code>OSC</code></td>
<td><code>ESC ]</code></td>
<td>"\x1b]"</td>
<td>Starts an OSC command. Is followed by a command string terminated by <code>ST</code>. Example: <code>\e]0;My Screen Title\a</td>
<td>*Operating System Command*</td>
<td>`OSC`</td>
<td>`ESC ]`</td>
<td>`"\x1b]"`</td>
<td>Starts an OSC command. Is followed by a command string terminated by `ST`. Example: `\e]0;My Screen Title\a`</td>
</tr>
<tr>
<td><b>Select Graphic Rendition</b></td>
<td><code>SGR</code></td>
<td><code>CSI <i>n</i> ; <i>n</i> ; <i>n</i> m<code></td>
<td><code>"\x1b[1;2;3m"</code></td>
<td>Set text attributes, like color or style. 0 to 10 numbers can be used, <code>\e[m</code> is treated as <code>\e[0m</code></td>
<td>*Select Graphic Rendition*</td>
<td>`SGR`</td>
<td>`CSI <i>n</i>;<i>n</i>;<i>n</i>m`</td>
<td>`"\x1b[1;2;3m"`</td>
<td>Set text attributes, like color or style. 0 to 10 numbers can be used, `\e[m` is treated as `\e[0m`</td>
</tr>
</tbody>
</table>
</div>
<p>There are also some other commands that don't follow the CSI, SGR or OSC pattern, such as <code>\e7</code> or
<code>\e#8</code>. A list of the most important escape sequences is presented in the following sections.</p>
<p>There are also some other commands that don't follow the CSI, SGR or OSC pattern, such as `\e7` or
`\e#8`. A list of the most important escape sequences is presented in the following sections.</p>
</div>
</div>
@ -112,7 +122,9 @@
<h2>Screen Behavior & Refreshing</h2>
<div class="Row v">
<p>The initial screen size, title text and button labels can be configured in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>.</p>
<p>
The initial screen size, title text and button labels can be configured in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>.
</p>
<p>
Screen updates are sent to the browser through a WebSocket after some time of inactivity on the communication UART
@ -129,8 +141,8 @@
<div class="Row v">
<p>
All text attributes are set using SGR commands like <code>\e[10;20;30m</code>, with up to 10 numbers separated by semicolons.
To restore all attributes to their default states, use SGR 0: <code>\e[0m</code> or <code>\e[m</code>.
All text attributes are set using SGR commands like `\e[10;20;30m`, with up to 10 numbers separated by semicolons.
To restore all attributes to their default states, use SGR 0: `\e[0m` or `\e[m`.
</p>
<p>Those are the supported text attributes SGR codes:</p>
@ -155,12 +167,16 @@
<h2>Colors</h2>
<div class="Row v">
<p>Colors are set using SGR commands (like <code>\e[10;20;30m</code>). The following tables list the SGR codes to use.
<p>
Colors are set using SGR commands (like `\e[10;20;30m`). The following tables list the SGR codes to use.
Selected colors are used for any new text entered, as well as for empty space when using line and screen clearing commands.
The configured default colors can be restored using SGR 39 for foreground and SGR 49 for background.</p>
The configured default colors can be restored using SGR 39 for foreground and SGR 49 for background.
</p>
<p>The actual color representation depends on a color theme which
can be selected in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>.</p>
<p>
The actual color representation depends on a color theme which
can be selected in <a href="<?= url('cfg_term') ?>">Terminal Settings</a>.
</p>
<h3>Foreground colors</h3>
@ -213,20 +229,20 @@
</div>
<div class="Box fold">
<h2>User Input: Keyboard, Mouse, Buttons</h2>
<h2>User Input: Keyboard, Mouse</h2>
<div class="Row v">
<h3>Keyboard</h3>
<p>
The user can input text using their keyboard, or on Android, using the on-screen keyboard which is open using
a button beneath the screen. Supported are all printable characters, as well as many control keys, such as arrows, Ctrl+letters
and function keys. Sequences sent by function keys are based on VT102 and xterm.
a button beneath the screen. Supported are all printable characters, as well as many control keys, such as arrows, _Ctrl+letters_
and function keys. Sequences sent by function keys are based on VT102 and Xterm.
</p>
<p>
The codes sent by Home, End, F1-F4 and cursor keys are affected by various keyboard modes (Application Cursor Keys,
Application Numpad Mode, SS3 Fn Keys Mode).
The codes sent by _Home_, _End_, _F1-F4_ and cursor keys are affected by various keyboard modes (_Application Cursor Keys_,
_Application Numpad Mode_, _SS3 Fn Keys Mode_).
Some can be set in the <a href="<?= url('cfg_term') ?>">Terminal Settings</a>, others via commands.
</p>
@ -238,87 +254,87 @@
<thead><tr><th>Key</th><th>Code</th><th>Key</th><th>Code</th></tr></thead>
<tr>
<td>Up</td>
<td><code>\e[A</code></td>
<td>`\e[A`</td>
<td>F1</td>
<td><code>\eOP</code></td>
<td>`\eOP`</td>
</tr>
<tr>
<td>Down</td>
<td><code>\e[B</code></td>
<td>`\e[B`</td>
<td>F2</td>
<td><code>\eOQ</code></td>
<td>`\eOQ`</td>
</tr>
<tr>
<td>Right</td>
<td><code>\e[C</code></td>
<td>`\e[C`</td>
<td>F3</td>
<td><code>\eOR</code></td>
<td>`\eOR`</td>
</tr>
<tr>
<td>Left</td>
<td><code>\e[D</code></td>
<td>`\e[D`</td>
<td>F4</td>
<td><code>\eOS</code></td>
<td>`\eOS`</td>
</tr>
<tr>
<td>Home</td>
<td><code>\eOH</code></td>
<td>`\eOH`</td>
<td>F5</td>
<td><code>\e[15~</code></td>
<td>`\e[15~`</td>
</tr>
<tr>
<td>End</td>
<td><code>\eOF</code></td>
<td>`\eOF`</td>
<td>F6</td>
<td><code>\e[17~</code></td>
<td>`\e[17~`</td>
</tr>
<tr>
<td>Insert</td>
<td><code>\e[2~</code></td>
<td>`\e[2~`</td>
<td>F7</td>
<td><code>\e[18~</code></td>
<td>`\e[18~`</td>
</tr>
<tr>
<td>Delete</td>
<td><code>\e[3~</code></td>
<td>`\e[3~`</td>
<td>F8</td>
<td><code>\e[19~</code></td>
<td>`\e[19~`</td>
</tr>
<tr>
<td>Page Up</td>
<td><code>\e[5~</code></td>
<td>`\e[5~`</td>
<td>F9</td>
<td><code>\e[20~</code></td>
<td>`\e[20~`</td>
</tr>
<tr>
<td>Page Down</td>
<td><code>\e[6~</code></td>
<td>`\e[6~`</td>
<td>F10</td>
<td><code>\e[21~</code></td>
<td>`\e[21~`</td>
</tr>
<tr>
<td>Enter</td>
<td><code>CR (13)</code></td>
<td>`\r` (13)</td>
<td>F11</td>
<td><code>\e[23~</code></td>
<td>`\e[23~`</td>
</tr>
<tr>
<td>Ctrl+Enter</td>
<td><code>LF (10)</code></td>
<td>`\n` (10)</td>
<td>F12</td>
<td><code>\e[24~</code></td>
<td>`\e[24~`</td>
</tr>
<tr>
<td>Tab</td>
<td><code>TAB (9)</code></td>
<td>`\t` (9)</td>
<td>ESC</td>
<td><code>ESC (27)</code></td>
<td>`\e` (27)</td>
</tr>
<tr>
<td>Backspace</td>
<td><code>BS (8)</code></td>
<td>`\b` (8)</td>
<td>Ctrl+A..Z</td>
<td><code>ASCII 1-26</code></td>
<td>ASCII 1-26</td>
</tr>
</table>
@ -326,107 +342,114 @@
<p>
The blue buttons under the screen send ASCII codes 1, 2, 3, 4, 5, which incidentally
correspond to Ctrl+A,B,C,D,E. This choice was made to make button press parsing as simple as possible.
correspond to _Ctrl+A,B,C,D,E_. This choice was made to make button press parsing as simple as possible.
</p>
<h3>Mouse</h3>
<p>
ESPTerm implements standard mouse tracking schemes based on Xterm. Mouse tracking can be used to implement
ESPTerm implements standard mouse tracking modes based on Xterm. Mouse tracking can be used to implement
powerful user interactions such as on-screen buttons, draggable sliders or dials, menus etc. ESPTerm's
mouse tracking was tested using <code>vttest</code> and should be compatible with all terminal applications
mouse tracking was tested using VTTest and should be compatible with all terminal applications
that request mouse tracking.
</p>
<p>
Mouse can be tracked in different ways; some are easier to parse, others more powerful. The coordinates
can also be encoded in different ways. All mouse tracking options are set using option commands:
<code>CSI ? <i>n</i> h</code> to enable, <code>CSI ? <i>n</i> l</code> to disable option <i>n</i>.
`CSI ? _n_ h` to enable, `CSI ? _n_ l` to disable option _n_.
</p>
<h4>Mouse Tracking Modes</h4>
<p>
All tracking modes produce three numbers which are then encoded and send to the application.
First is the <b>event number</b> (N), then the <b>X and Y coordinates</b>, 1-based.
Mouse wheel works as two buttons which generate only press events.
First is the _event number_ N, then the _X and Y coordinates_, 1-based.
</p>
<table>
<p>
Mouse buttons are numbered: 1=left, 2=middle, 3=right.
Wheel works as two buttons (4 and 5) which generate only press events (no release).
</p>
<div class="tscroll">
<table class="nomen">
<thead><tr><th>Option</th><th>Name</th><th>Description</th></tr></thead>
<tr>
<td>9</td>
<td>X10 mode</td>
<td>`9`</td>
<td>*X10~mode*</td>
<td>
This is the most basic tracking mode, in which <b>only button presses</b> are reported.
N = button - 1: (0 left, 1 middle, 2 right, 3, 4 wheel).
</td>
</tr>
<tr>
<td>1000</td>
<td>Normal mode</td>
<td>`1000`</td>
<td>*Normal~mode*</td>
<td>
In Normal mode, both button presses and releases are reported.
The lower two bits of N indicate the button pressed:
00b (0) left, 01b (1) middle, 10b (2) right, 11b (3) button release.
`00b` (0) left, `01b` (1) middle, `10b` (2) right, `11b` (3) button release.
Wheel buttons are reported as 0 and 1 with added 64 (e.g. 64 and 65).
Normal mode also supports tracking of modifier keys, which are added to N as bit masks:
4 Shift, 8 Meta/Alt, 16 Control/Cmd. Example: middle button with Shift = 1 + 4 = 101b (5).
4=_Shift_, 8=_Meta/Alt_, 16=_Control/Cmd_. Example: middle button with _Shift_ = 1 + 4 = `101b` (5).
</td>
</tr>
<tr>
<td>1002</td>
<td>Button-Event tracking</td>
<td>`1002`</td>
<td>*Button-Event tracking*</td>
<td>
This is similar to Normal mode (1000), but mouse motion with a button held is also reported.
This is similar to Normal mode (`1000`), but mouse motion with a button held is also reported.
A motion event is generated when the mouse cursor moves between screen character cells.
A motion event has the same N as a press event, but 32 is added.
For example, drag-drop event with the middle button will produce N = 1 (press), 33 (dragging) and 3 (release).
</td>
</tr>
<tr>
<td>1003</td>
<td>Any-Event tracking</td>
<td>`1003`</td>
<td>*Any-Event tracking*</td>
<td>
This mode is almost identical to Button Event tracking (1002), but motion events
are sent even when no mouse buttons are held. This could be used to draw on-screen mouse cursor, for example.
Motion events with no buttons will use N = 32 + 11b (35).
Motion events with no buttons will use N = 32 + _11b_ (35).
</td>
</tr>
<tr>
<td>1004</td>
<td>Focus tracking</td>
<td>`1004`</td>
<td>*Focus~tracking*</td>
<td>
Focus tracking is a separate function from the other mouse tracking modes, therefore they can be enabled together.
Focus tracking reports when the terminal window (in Xterm) gets or loses focus, or in ESPTerm's case, when any
user is connected. This can be used to pause/resume a game or on-screen animations.
Focus tracking mode sends <code>CSI I</code> when the terminal receives, and <code>CSI O</code> when it loses focus.
Focus tracking mode sends `CSI I` when the terminal receives, and `CSI O` when it loses focus.
</td>
</tr>
</table>
</div>
<h4>Mouse Report Encoding</h4>
<p>
The following schemes can be used with any of the tracking modes (except Focus tracking, which is not affected).
The following encoding schemes can be used with any of the tracking modes (except Focus tracking, which is not affected).
</p>
<table>
<div class="tscroll">
<table class="nomen">
<thead><tr><th>Option</th><th>Name</th><th>Description</th></tr></thead>
<tr>
<td>N/A</td>
<td>Normal scheme</td>
<td>--</td>
<td>*Normal~encoding*</td>
<td>
This is the default scheme used when no other option is selected.
A mouse report in this scheme has the format <code>CSI M <i>n</i> <i>x</i> <i>y</i></code>,
where <i>n</i>, <i>x</i> and <i>y</i> are characters with ASCII value 32 + the respective number, e.g.
0 becomes 32 (space), 1 becomes 33 (!). Example: <code>\e[M !!</code> - left button press at coordinates 1,1 when
using X10 mode.
This is the default encoding scheme used when no other option is selected.
In this mode, a mouse report has the format `CSI M _n_ _x_ _y_`,
where _n_, _x_ and _y_ are characters with ASCII value = 32 (space) + the respective number, e.g.
0 becomes 32 (space), 1 becomes 33 (!). The reason for adding 32 is to avoid producing control characters.
Example: `\e[M !!` - left button press at coordinates 1,1 when using X10 mode.
</td>
</tr>
<tr>
<td>1005</td>
<td>UTF-8 scheme</td>
<td>`1005`</td>
<td>*UTF-8~encoding*</td>
<td>
This scheme should encode each of the numbers as a UTF-8 code point, expanding the maximum possible value.
Since ESPTerm's screen size is limited and this has no practical benefit, this serves simply as an alias
@ -434,21 +457,22 @@
</td>
</tr>
<tr>
<td>1006</td>
<td>SGR scheme</td>
<td>`1006`</td>
<td>*SGR~encoding*</td>
<td>
In SGR scheme, the response is a SGR sequence with the three numbers as ASCII values. In this case,
32 is not added, like in the Normal and UTF-8 schemes. Also, button release is not reported as 11b,
but using the normal button code while changing the final SGR character: <code>M</code> for button press
and <code>m</code> for button release. Example: <code>\e[2;80;24m</code> - the right button was released
In SGR encoding, the response looks like a SGR sequence with the three numbers as semicolon-separated
ASCII values. In this case 32 is not added like in the Normal and UTF-8 schemes, because
it would serve nor purpose here. Also, button release is not reported as 11b,
but using the normal button code while changing the final SGR character: `M` for button press
and `m` for button release. Example: `\e[2;80;24m` - the right button was released
at row 80, column 24.
</td>
</tr>
<tr>
<td>1015</td>
<td>URXVT scheme</td>
<td>`1015`</td>
<td>*URXVT~encoding*</td>
<td>
This is similar to the SGR scheme, but the final character is always <code>M</code> and the numbers are
This is similar to SGR encoding, but the final character is always `M` and the numbers are
like in the Normal scheme, with 32 added. This scheme has no real advantage over the previous schemes and
was added solely for completeness.
</td>
@ -456,6 +480,7 @@
</table>
</div>
</div>
</div>
<div class="Box fold">
<h2>Cursor Commands</h2>
@ -473,8 +498,8 @@
</p>
<p>
<b>Legend:</b>
Italic letters such as <i>n</i> are ASCII numbers that serve as arguments, separated with a semicolon.
*Legend:*
Italic letters such as _n_ are ASCII numbers that serve as arguments, separated with a semicolon.
If an argument is left out, it's treated as 0 or 1, depending on what makes sense for the command.
</p>
@ -485,33 +510,43 @@
<tbody>
<tr>
<td>
\e[<i>n</i>A<br>
\e[<i>n</i>B<br>
\e[<i>n</i>C<br>
<code>
\e[<i>n</i>A \\
\e[<i>n</i>B \\
\e[<i>n</i>C \\
\e[<i>n</i>D
</code>
</td>
<td>Move cursor up (A), down (B), right (C), left (D)</td>
<td>Move cursor up (`A`), down (`B`), right (`C`), left (`D`)</td>
</tr>
<tr>
<td>
\e[<i>n</i>F<br>
<code>
\e[<i>n</i>F \\
\e[<i>n</i>E
</code>
</td>
<td>Go <i>n</i> lines up (F) or down (E), start of line</td>
<td>Go _n_ lines up (`F`) or down (`E`), start of line</td>
</tr>
<tr>
<td>
\e[<i>r</i>d<br>
\e[<i>c</i>G<br>
<code>
\e[<i>r</i>d \\
\e[<i>c</i>G \\
\e[<i>r</i>;<i>c</i>H
</code>
</td>
<td>
Go to absolute position - row (d), column (G), or both (H). Use <code>\e[H</code> to go to 1,1.
Go to absolute position - row (`d`), column (`G`), or both (`H`). Use `\e[H` to go to 1,1.
</td>
</tr>
<tr>
<td>\e[6n</td>
<td>Query cursor position. Sent back as <code>\e[<i>r</i>;<i>c</i>R</code>.</td>
<td>
`\e[6n`
</td>
<td>
Query cursor position. Sent back as `\e[<i>r</i>;<i>c</i>R`.
</td>
</tr>
</tbody>
</table>
@ -522,12 +557,22 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\e[s<br>\e[u</td>
<td>Save (s) or restore (u) cursor position</td>
<td>
<code>
\e[s \\
\e[u
</code>
</td>
<td>Save (`s`) or restore (`u`) cursor position</td>
</tr>
<tr>
<td>\e7<br>\e8</td>
<td>Save (7) or restore (8) cursor position and attributes</td>
<td>
<code>
\e7 \\
\e8
</code>
</td>
<td>Save (`7`) or restore (`8`) cursor position and attributes</td>
</tr>
</tbody>
</table>
@ -538,22 +583,38 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\e[<i>a</i>;<i>b</i>r</td>
<td>Set scrolling region to rows <i>a</i> through <i>b</i> and go to 1,1. By default, the
<td>
`\e[<i>a</i>;<i>b</i>r`
</td>
<td>
Set scrolling region to rows _a_ through _b_ and go to 1,1. By default, the
scrolling region spans the entire screen height. The cursor can leave the region using
absolute position commands, unless Origin Mode (see below) is active.</td>
absolute position commands, unless Origin Mode (see below) is active.
</td>
</tr>
<tr>
<td>\e[?6h<br>\e[?6l</td>
<td>Enable (h) or disable (l) Origin Mode and go to 1,1. In Origin Mode, all coordinates
are relative to the Scrolling Region and the cursor can't leave the region.</td>
<td>
<code>
\e[?6h \\
\e[?6l
</code>
</td>
<td>
Enable (`h`) or disable (`l`) Origin Mode and go to 1,1. In Origin Mode, all coordinates
are relative to the Scrolling Region and the cursor can't leave the region.
</td>
</tr>
<tr>
<td>
\e[<i>n</i>S<br>
<code>
\e[<i>n</i>S \\
\e[<i>n</i>T
</code>
</td>
<td>
Move contents of the Scrolling Region up (`S`) or down (`T`), pad with empty
lines of the current background color.
</td>
<td>Move contents of the Scrolling Region up (S) or down (T), pad with empty lines of the current background color.</td>
</tr>
</tbody>
</table>
@ -564,22 +625,30 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\eH</td>
<td>Set tab stop at the current column. There are, by default, tabs every 8 columns.</td>
<td>
`\eH`
</td>
<td>
Set tab stop at the current column. There are, by default, tabs every 8 columns.
</td>
</tr>
<tr>
<td>
\e[<i>n</i>I<br>
<code>
\e[<i>n</i>I \\
\e[<i>n</i>Z
</code>
</td>
<td>Advance (I) or go back (Z) <i>n</i> tab stops or end/start of line. ASCII TAB (9) is equivalent to <code>\e[1I</code></td>
<td>Advance (`I`) or go back (`Z`) _n_ tab stops or end/start of line. ASCII _TAB_ (9) is equivalent to <code>\e[1I</code></td>
</tr>
<tr>
<td>
\e[0g<br>
\e[3g<br>
<code>
\e[0g \\
\e[3g \\
</code>
</td>
<td>Clear tab stop at the current column (0), or all columns (3).</td>
<td>Clear tab stop at the current column (`0`), or all columns (`3`).</td>
</tr>
</tbody>
</table>
@ -590,12 +659,22 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\e[?7h<br>\e[?7l</td>
<td>Enable (h) or disable (l) cursor auto-wrap and screen auto-scroll</td>
<td>
<code>
\e[?7h \\
\e[?7l
</code>
</td>
<td>Enable (`h`) or disable (`l`) cursor auto-wrap and screen auto-scroll</td>
</tr>
<tr>
<td>\e[?25h<br>\e[?25l</td>
<td>Show (h) or hide (l) the cursor</td>
<td>
<code>
\e[?25h \\
\e[?25l
</code>
</td>
<td>Show (`h`) or hide (`l`) the cursor</td>
</tr>
</tbody>
</table>
@ -608,7 +687,7 @@
<div class="Row v">
<p>
<b>Legend:</b>
Italic letters such as <i>n</i> are ASCII numbers that serve as arguments, separated with a semicolon.
Italic letters such as _n_ are ASCII numbers that serve as arguments, separated with a semicolon.
If an argument is left out, it's treated as 0 or 1, depending on what makes sense for the command.
</p>
@ -616,33 +695,50 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\e[<i>m</i>J</td>
<td>Clear part of screen. <i>m</i>: 0 - from cursor, 1 - to cursor, 2 - all</td>
<td>
`\e[<i>m</i>J`
</td>
<td>
Clear part of screen. _m_: 0 - from cursor, 1 - to cursor, 2 - all
</td>
</tr>
<tr>
<td>\e[<i>m</i>K</td>
<td>Erase part of line. <i>m</i>: 0 - from cursor, 1 - to cursor, 2 - all</td>
<td>
`\e[<i>m</i>K`
</td>
<td>
Erase part of line. _m_: 0 - from cursor, 1 - to cursor, 2 - all
</td>
</tr>
<tr>
<td>
\e[<i>n</i>X
`\e[<i>n</i>X`</td>
<td>
Erase _n_ characters in line.
</td>
<td>Erase <i>n</i> characters in line.</td>
</tr>
<tr>
<td>
\e[<i>n</i>L<br>
<code>
\e[<i>n</i>L \\
\e[<i>n</i>M
</code>
</td>
<td>
Insert (`L`) or delete (`M`) _n_ lines. Following lines are pulled up or pushed down.
</td>
<td>Insert (L) or delete (M) <i>n</i> lines. Following lines are pulled up or pushed down.</td>
</tr>
<tr>
<td>
\e[<i>n</i>@<br>
\e[<i>nP
<code>
\e[<i>n</i>@ \\
\e[<i>n</i>P
</code>
</td>
<td>
Insert (`@`) or delete (`P`) _n_ characters. The rest of the line is pulled left or pushed right.
Characters going past the end of line are lost.
</td>
<td>Insert (@) or delete (P) <i>n</i> characters. The rest of the line is pulled left or pushed right.
Characters going past the end of line are lost.</td>
</tr>
</tbody>
</table>
@ -656,7 +752,7 @@
<p>
ESPTerm implements Alternate Character Sets as a way to print box drawing characters
and special symbols. A character set can change what each received ASCII character
is printed as on the screen (eg. "{" is "π" in codepage 0). The implementation is based
is printed as on the screen (eg. "{" is "π" in codepage `0`). The implementation is based
on the original VT devices.
Since ESPTerm also fully supports UTF-8, you can probably ignore this feature and use
Unicode directly. It's added for compatibility with some programs that use this.
@ -665,10 +761,10 @@
<p>The following codepages are implemented:</p>
<ul>
<li>B - US ASCII (default)</li>
<li>A - UK ASCII: # replaced with £</li>
<li>0 - Symbols and basic line drawing (standard DEC alternate character set)</li>
<li>1 - Symbols and advanced line drawing (based on DOS codepage 437)</li>
<li>`B` - US ASCII (default)</li>
<li>`A` - UK ASCII: # replaced with £</li>
<li>`0` - Symbols and basic line drawing (standard DEC alternate character set)</li>
<li>`1` - Symbols and advanced line drawing (based on DOS codepage 437)</li>
</ul>
<p>To see what character maps to which symbol, look in the source code or try it. All codepages use codes 32-127, 32 being space.</p>
@ -686,19 +782,19 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\e(<i>x</i></td>
<td>`\e(<i>x</i>`</td>
<td>Set G0 = codepage <i>x</i></td>
</tr>
<tr>
<td>\e)<i>x</i></td>
<td>`\e)<i>x</i>`</td>
<td>Set G1 = codepage <i>x</i></td>
</tr>
<tr>
<td>SO (14)</td>
<td>_SO_ (14)</td>
<td>Activate G0</td>
</tr>
<tr>
<td>SI (15)</td>
<td>_SI_ (15)</td>
<td>Activate G1</td>
</tr>
</table>
@ -719,20 +815,21 @@
<thead><tr><th>Code</th><th>Meaning</th></tr></thead>
<tbody>
<tr>
<td>\ec</td>
<td>`\ec`</td>
<td>
Clear screen, reset attributes and cursor.
The screen size, title and button labels remain unchanged.
</td>
</tr>
<tr>
<td>\e[5n</td>
<td>`\e[5n`</td>
<td>
Query device status, ESPTerm replies with <code>\e[0n</code> "device is OK".
Can be used to check if the terminal has booted up and is ready to receive commands.</td>
Query device status, ESPTerm replies with `\e[0n` "device is OK".
Can be used to check if the terminal has booted up and is ready to receive commands.
</td>
</tr>
<tr>
<td>CAN (24)</td>
<td>_CAN_ (24)</td>
<td>
This ASCII code is not a command, but is sent by ESPTerm when it becomes ready to receive commands.
When this code is received on the UART, it means ESPTerm has restarted and is ready. Use this to detect
@ -740,22 +837,26 @@
</td>
</tr>
<tr>
<td>\e]0;<i>title</i>\a</td>
<td>`\e]0;<i>title</i>\a`</td>
<td>Set screen title (this is a standard OSC command)</td>
</tr>
<tr>
<td>
\e]<i>81</i>;<i>btn1</i>\a<br>
\e]<i>82</i>;<i>btn2</i>\a<br>
\e]<i>83</i>;<i>btn3</i>\a<br>
\e]<i>84</i>;<i>btn4</i>\a<br>
\e]<i>85</i>;<i>btn5</i>\a<br>
<code>
\e]<i>81</i>;<i>btn1</i>\a \\
\e]<i>82</i>;<i>btn2</i>\a \\
\e]<i>83</i>;<i>btn3</i>\a \\
\e]<i>84</i>;<i>btn4</i>\a \\
\e]<i>85</i>;<i>btn5</i>\a \\
</code>
</td>
<td>
Set button 1-5 label - eg.`\e]81;Yes\a`
sets the first button text to "Yes".
</td>
<td>Set button 1-5 label - eg. <code>\e]81;Yes\a</code>
sets the first button text to "Yes".</td>
</tr>
<tr>
<td>\e[8;<i>r</i>;<i>c</i>t</td>
<td>`\e[8;<i>r</i>;<i>c</i>t`</td>
<td>Set screen size (this is a command borrowed from xterm)</td>
</tr>
</tbody>

@ -245,7 +245,7 @@ code,
pre
//samp
{
font-family: monospace;
font-family: "DejaVu Sans Mono", "Inconsolata", monospace;
font-size: 1em;
}

@ -1,6 +1,7 @@
.Box {
display: block;
max-width: 900px;
line-height: 1.35em;
margin-top: dist(0);
padding: dist(-1) dist(0);

@ -22,6 +22,14 @@
}
}
.page-help {
code {
background: rgba(33, 97, 109, 0.31);
border-radius: 1px;
padding: 0 2px;
}
}
.colorprev {
margin-top: dist(-2);
margin-bottom: dist(-2);
@ -48,10 +56,6 @@
}
.ansiref {
td:nth-child(1) {
font-family: monospace;
}
&.w100 {
width: 100%;
@ -60,3 +64,19 @@
}
}
}
.nomen {
width: 100%;
code {
white-space: nowrap;
}
td:last-child {
min-width: 15em;
}
}
.tscroll {
overflow-x: auto;
}

Loading…
Cancel
Save