turbo-editors/turbo-gopublic Fork 0
v1.0.2
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-go.git
git clone ssh://git@rickub.com/turbo-editors/turbo-go.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

📦 Turbo Go 3d7798b · on v1.0.2 · k33g · 12h ago
terminal.md · 228 lines · 9.3 KBmarkdown
Blame HistoryOpen raw

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-ACtrl-Z 0x010x1a
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~
F1F4 ESC O P Q R S
F5F12 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
F1F12 Leur action habituelle dans l'éditeur
Alt-X Quitter
Alt-0Alt-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.

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

  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)