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