Terminal
Le terminal émule un shell simple pour s'initier à la ligne de commande : fichiers, Git, Python. Il est fait de deux parties :
- l'interpréteur (
src/services/terminal/), sans état et sans Vue : il exécute une ligne dans un contexte ; - les sessions (store
terminal) : une par console du panneau inférieur, avec ses lignes, son répertoire courant, son historique et le noyau de ses programmes Python.
Commandes
Chaque commande est un ShellCommand : nom (et alias), groupe, syntaxe et description (traduites), run(args, ctx), et ce qu'elle complète (flags, completesPaths, complete). L'aide (help) et la complétion (Tab) sont dérivées du registre COMMANDS : une commande ajoutée y apparaît seule.
| Dossier | Commandes |
|---|---|
fs/navigation.ts | pwd, cd, ls, tree |
fs/files.ts | mkdir, rmdir, rm, touch, cp, mv |
fs/read.ts | cat, head, tail, grep, wc, stat |
python/ | python (options de CPython, args.ts ; -m passe par runpy, comme CPython), pip install (par le mécanisme d'installation de Basthon, pyodide.loadPackagesFromImports) |
git/ | git et ses sous-commandes (GitSubcommand), par famille : modifications, branches, historique, étiquettes |
system.ts, index.ts | echo, clear, history, whoami, date, uname, help |
executeCommandLine découpe la ligne (guillemets, > et >>), lance la commande dans un vfs.batch (une seule notification par commande) et écrit la sortie redirigée dans un fichier.
Le contexte
Une commande ne connaît pas les stores. Elle reçoit un TerminalContext :
| Champ | Rôle |
|---|---|
ws | le projet (Workspace : fichiers et dépôt Git) |
cwd, previousCwd, setCwd | répertoire courant de la session |
history | commandes déjà saisies |
saveEditors() | enregistre les éditeurs avant de lire les fichiers (git add, python) |
python | le Python de la session : run (un noyau Basthon par terminal, neuf à chaque programme) et showConsole (python seul bascule vers la console Python) |
disabledGroups | groupes de commandes indisponibles (git quand la page hôte désactive Git) : ni exécution, ni aide, ni complétion |
io | E/S des programmes ; absentes quand la sortie est redirigée |
Les commandes Git passent par le service Git : l'interface suit seule, par les notifications (voir Stores et synchronisation).
Tests
tests/helpers/terminal.ts fournit createShell(), un terminal sans interface (répertoire courant, historique, Python factice) pour tester les commandes, et useTestTerminal() pour une session du store.