1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
# Référence : fenêtres terminal
> Description neutre des fenêtres terminal ouvertes par Turbo Go, des touches auxquelles elles répondent et des séquences d'échappement que l'émulateur implémente.
## Ouverture
| Chemin | Condition |
| --- | --- |
| `F8` | Toujours |
| **Window ▸ New terminal** | Toujours |
Aucun des deux n'exige qu'un fichier soit ouvert.
## Le shell
| Propriété | Valeur |
| --- | --- |
| Programme | `$SHELL`, ou `/bin/sh` si la variable est absente ou vide ; sous Windows `%COMSPEC%`, ou `cmd.exe` |
| Répertoire de travail | Le dossier du fichier de la fenêtre au premier plan ; le répertoire de travail de l'éditeur si aucun fichier n'est ouvert |
| `TERM` | `xterm-256color`, toujours — remplaçant toute valeur héritée |
| Environnement | Celui de l'éditeur, avec `TERM` remplacé |
| Terminal de contrôle | Oui : sous Linux et macOS le shell tourne dans sa propre session avec le pseudo-terminal comme terminal de contrôle ; sous Windows il est attaché à une pseudo-console. Dans les deux cas le contrôle de tâches et `Ctrl-C` fonctionnent |
| Taille initiale | Celle de la fenêtre, mise à jour à chaque redimensionnement |
## Plateformes supportées
| Plateforme | Comportement |
| --- | --- |
| Linux | Supportée (`/dev/ptmx`) |
| macOS | Supportée (`/dev/ptmx`) |
| Windows | Supportée (pseudo-console, ConPTY) : Windows 10 version 1809 ou plus récent. Compilé et vérifié ; **pas encore exécuté par les auteurs** sur une machine Windows |
| Autres | `F8` ouvre un message indiquant que les fenêtres terminal ne sont pas encore supportées ; rien d'autre ne change |
## Touches
### Après la fin du programme
Une fenêtre dont la commande est terminée garde sa sortie mais cesse de se comporter comme un terminal : seules `Maj-Page↑` et `Maj-Page↓` sont encore prises, et toute autre touche atteint l'éditeur — c'est ce qui permet à `Ctrl-W` de la fermer.
### Envoyées au shell
Toute touche non listée ci-dessous sous « conservées par l'éditeur », encodée comme un terminal l'attend.
| Touche | Octets envoyés |
| --- | --- |
| caractère imprimable | son encodage UTF-8 |
| `Alt-<touche>` | `ESC` suivi des octets de cette touche |
| `Ctrl-A` … `Ctrl-Z` | `0x01` … `0x1a` |
| `Enter` | `\r` |
| `Tab` | `\t` |
| `Shift-Tab` | `ESC [ Z` |
| `Backspace` | `0x7f` |
| `Escape` | `0x1b` |
| `↑` `↓` `→` `←` | `ESC [ A B C D`, ou `ESC O A B C D` en mode curseur application |
| `Home` `End` | `ESC [ H`, `ESC [ F`, ou les formes `ESC O` en mode curseur application |
| `Insert` `Delete` | `ESC [ 2~`, `ESC [ 3~` |
| `PgUp` `PgDn` | `ESC [ 5~`, `ESC [ 6~` |
| `F1` … `F4` | `ESC O P Q R S` |
| `F5` … `F12` | `ESC [ 15~ 17~ 18~ 19~ 20~ 21~ 23~ 24~` |
Une touche sans signification pour un terminal n'envoie rien.
### Conservées par l'éditeur
| Touche | Action |
| --- | --- |
| `F1` … `F12` | Leur action habituelle dans l'éditeur |
| `Alt-X` | Quitter |
| `Alt-0` … `Alt-9` | Lister les fenêtres / passer la fenêtre 1…9 au premier plan |
Les touches de fonction n'atteignent donc jamais un programme lancé dans une fenêtre terminal.
### Traitées par la fenêtre terminal elle-même
| Touche | Action |
| --- | --- |
| `Shift-PgUp` | Reculer d'un écran dans l'historique |
| `Shift-PgDn` | Avancer d'un écran |
Toute touche envoyée au shell ramène également la vue à l'écran vivant.
## Souris
| Action | Effet |
| --- | --- |
| Molette haut / bas | Défiler de trois lignes dans l'historique |
| Clic | Passe la fenêtre au premier plan ; n'est pas transmis au programme |
Le rapport souris n'est pas implémenté : un programme n'est jamais informé des clics.
## Historique
| Propriété | Valeur |
| --- | --- |
| Lignes conservées | 2000 |
| Ce qui est conservé | Uniquement les lignes sorties par le haut de l'écran principal |
| Écran alternatif | Non conservé — un programme plein écran ne laisse aucun historique |
## Émulation
`TERM` vaut `xterm-256color`. Voici ce qui en est implémenté.
### Caractères de contrôle
| Octet | Effet |
| --- | --- |
| `0x07` BEL | Noté ; l'éditeur ne l'émet pas |
| `0x08` BS | Curseur d'une colonne à gauche |
| `0x09` HT | Jusqu'à la tabulation suivante, toutes les 8 colonnes |
| `0x0a` `0x0b` `0x0c` | Saut de ligne |
| `0x0d` CR | Colonne 1 |
### Séquences d'échappement
| Séquence | Nom | Effet |
| --- | --- | --- |
| `ESC D` | IND | Saut de ligne |
| `ESC E` | NEL | Retour chariot et saut de ligne |
| `ESC M` | RI | Saut de ligne inverse, en conservant la colonne |
| `ESC 7` | DECSC | Sauvegarder le curseur et le style |
| `ESC 8` | DECRC | Les restaurer |
| `ESC c` | RIS | Réinitialisation complète |
### Séquences CSI
| Séquence | Nom | Effet |
| --- | --- | --- |
| `CSI n A B C D` | CUU CUD CUF CUB | Déplacer de n cellules haut, bas, droite, gauche |
| `CSI n E F` | CNL CPL | n lignes plus bas / plus haut, colonne 1 |
| `CSI n G` | CHA | Aller à la colonne n |
| `CSI l ; c H`, `CSI l ; c f` | CUP HVP | Aller à la ligne l, colonne c |
| `CSI n d` | VPA | Aller à la ligne n |
| `CSI n J` | ED | Effacer l'écran : 0 jusqu'à la fin, 1 jusqu'au début, 2 ou 3 tout |
| `CSI n K` | EL | Effacer la ligne : 0 jusqu'à la fin, 1 jusqu'au début, 2 tout |
| `CSI n L` | IL | Insérer n lignes vides au curseur |
| `CSI n M` | DL | Supprimer n lignes au curseur |
| `CSI n @` | ICH | Insérer n cellules vides |
| `CSI n P` | DCH | Supprimer n cellules |
| `CSI n X` | ECH | Effacer n cellules sur place |
| `CSI n S` | SU | Faire défiler la région de n lignes vers le haut |
| `CSI n T` | SD | Faire défiler la région de n lignes vers le bas |
| `CSI h ; b r` | DECSTBM | Définir la région de défilement aux lignes h…b |
| `CSI s`, `CSI u` | SCP RCP | Sauvegarder / restaurer le curseur |
| `CSI … m` | SGR | Couleurs et attributs, ci-dessous |
`IL` et `DL` ne font rien lorsque le curseur est hors de la région de défilement.
### Modes privés
Activés par `CSI ? n h`, désactivés par `CSI ? n l`.
| n | Nom | Effet |
| --- | --- | --- |
| 1 | DECCKM | Touches curseur application : les flèches envoient `ESC O x` |
| 7 | DECAWM | Retour à la ligne automatique à la marge droite |
| 25 | DECTCEM | Afficher le curseur |
| 47, 1047 | | Écran alternatif |
| 1048 | | Sauvegarder / restaurer le curseur |
| 1049 | | Sauvegarder le curseur, puis l'écran alternatif |
Tout autre mode est analysé et ignoré.
### SGR
| Code | Effet |
| --- | --- |
| 0 | Réinitialisation |
| 1, 22 | Gras activé / désactivé |
| 2, 22 | Atténué activé / désactivé |
| 3, 23 | Italique activé / désactivé |
| 4, 24 | Souligné activé / désactivé |
| 5, 6, 25 | Clignotement activé / désactivé |
| 7, 27 | Vidéo inverse activée / désactivée |
| 9, 29 | Barré activé / désactivé |
| 30–37, 40–47 | Les huit couleurs normales, premier plan / fond |
| 90–97, 100–107 | Les huit couleurs vives, premier plan / fond |
| 38;5;n, 48;5;n | Couleur n de la palette de 256 |
| 38;2;r;g;b, 48;2;r;g;b | Couleur 24 bits |
| 39, 49 | Retour à la couleur du thème |
Les seize couleurs nommées sont celles de tcell, c'est-à-dire la palette configurée dans le terminal de l'utilisateur, et non des valeurs hexadécimales figées. Une couleur étendue à court de paramètres laisse le style inchangé. Tout autre code est ignoré.
### OSC
| Séquence | Effet |
| --- | --- |
| `OSC 0 ; texte BEL`, `OSC 2 ; texte BEL` | Définir le titre de la fenêtre |
| `OSC … ST` | Le terminateur `ESC \` est accepté à la place de BEL |
Le titre est plafonné à 4096 octets. Les autres commandes OSC sont analysées et ignorées.
### Consommées et ignorées
Analysées correctement, donc jamais affichées comme des caractères parasites, mais sans effet :
| Séquence | Nom |
| --- | --- |
| `ESC P …`, `ESC X …`, `ESC ^ …`, `ESC _ …` | DCS, SOS, PM, APC — lues jusqu'à leur terminateur de chaîne |
| `ESC (`, `ESC )`, `ESC *`, `ESC +`, `ESC %`, `ESC #`, `ESC <espace>` | Sélecteurs de jeu de caractères et de taille de ligne — l'émulateur travaille en UTF-8 de toute façon |
| `CSI ? n h`, `CSI ? n l` pour tout autre n | Modes privés non listés ci-dessus |
| Tout autre octet final CSI, code SGR ou commande OSC | |
### Non implémenté
Le rapport souris, le collage entre crochets, les bascules shift-in / shift-out, les lignes double largeur, sixel et les autres protocoles graphiques, ainsi que les rapports d'état et d'attributs DEC. Un programme qui en demande un n'obtient aucune réponse : celui qui en attend une attendra indéfiniment.
## Couleurs
| Clé de thème | Ce qu'elle colore |
| --- | --- |
| `terminal.text` | Toute cellule dont le programme n'a pas choisi la couleur |
| `terminal.cursor` | La cellule sous le curseur, quand la fenêtre a le focus |
Voir [Format des fichiers de thème](themes.md).
## Erreurs
| Message | Cause |
| --- | --- |
| Terminal windows are not supported on this platform yet | La compilation n'a pas de support des pseudo-terminaux : toute plateforme autre que Linux, macOS et Windows |
| `openpt: …`, `grantpt: …`, `ptsname: …` | Le système d'exploitation a refusé d'ouvrir un pseudo-terminal |
| `fork/exec …: no such file or directory` | `$SHELL` désigne un programme inexistant |
## Voir aussi
- [Lancer des commandes shell sans quitter l'éditeur](../how-to/use-a-terminal.md)
- [Fenêtres terminal](../explanation/terminal-windows.md)
- [Clavier](keyboard.md)
|