# Horizontal Tabulation Set (HTS)

> Set a tab stop at the cursor's column.

- **Sequence:** `ESC H`
- **ECMA-48:** [§8.3.62 HTS – Character Tabulation Set, p. 46](https://archive.org/details/ecma-48-5th-edition-june-1991/page/n59/mode/1up)
- **DEC STD 070:** [§5.4.5 Horizontal Tabulation Set, p. 5-69](https://archive.org/details/bitsavers_decstandar0VideoSystemsReferenceManualDec91_74264381/page/n323/mode/1up)
- **VT510:** [HTS—Horizontal Tab Set](https://vt100.net/docs/vt510-rm/HTS.html)

Set a horizontal tab stop at the column the cursor is in. The cursor does not
move, and the other tab stops are not affected. The next [HT](https://control-codes.page/c0/ht/index.html.md) or
[CHT](https://control-codes.page/csi/cht/index.html.md) from left of that column stops there.

HTS is a C1 control. ECMA-48 defines it both as the single byte `88` and as
`ESC H`, and the VT510 manual accepts either. libghostty-vt decodes its input
as UTF-8, so it accepts only `ESC H`: a lone `88` byte is not valid UTF-8 and
is printed as U+FFFD, the replacement character, and the code point U+0088
sent as UTF-8 is ignored.

[TBC](https://control-codes.page/csi/tbc/index.html.md) clears tab stops, one or all of them.

## Validation

### HTS-1: Set a stop

Input, one step per line:

```text
\e[?5W    # reset tab stops: 9 and 17
\e[1;5H
\eH
\e[1;1H
\tX
```

Expected screen:

```text
|____X_______________|
```

### HTS-2: The other stops stay

Input, one step per line:

```text
\e[?5W    # reset tab stops: 9 and 17
\e[1;5H
\eH
\e[1;1H
\t\tX     # 5, then 9
```

Expected screen:

```text
|________X___________|
```

### HTS-3: After clearing every stop

Input, one step per line:

```text
\e[3g     # clear every tab stop
\e[1;12H
\eH
\e[1;1H
\tX
```

Expected screen:

```text
|___________X________|
```

### HTS-4: The 8-bit form, sent as UTF-8

Input, one step per line:

```text
\e[3g      # clear every tab stop
\e[1;12H
\u{88}     # U+0088 is HTS in 8 bits; ignored
\e[1;1H
\tX        # no stop was set
```

Expected screen:

```text
|___________________X|
```

---

This is the Markdown version of <https://control-codes.page/esc/hts/>. On that page every validation case runs live in libghostty-vt, the terminal emulation core of Ghostty, compiled to WebAssembly.

The validation cases are written in the notation described in <https://control-codes.page/notation/index.html.md>.
