Skip to content
English

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.

DossierCommandes
fs/navigation.tspwd, cd, ls, tree
fs/files.tsmkdir, rmdir, rm, touch, cp, mv
fs/read.tscat, 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.tsecho, 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 :

ChampRôle
wsle projet (Workspace : fichiers et dépôt Git)
cwd, previousCwd, setCwdrépertoire courant de la session
historycommandes déjà saisies
saveEditors()enregistre les éditeurs avant de lire les fichiers (git add, python)
pythonle Python de la session : run (un noyau Basthon par terminal, neuf à chaque programme) et showConsole (python seul bascule vers la console Python)
disabledGroupsgroupes de commandes indisponibles (git quand la page hôte désactive Git) : ni exécution, ni aide, ni complétion
ioE/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.