# Référence : fenêtres terminal > Description neutre des fenêtres terminal ouvertes par Turbo Python, 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-` | `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 ` | 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)