turbo-editors/turbo-moonbitpublic Fork 0
v1.0.3
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-moonbit.git
git clone ssh://git@rickub.com/turbo-editors/turbo-moonbit.git

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

moonbit-tools.md · 242 lines · 12.0 KBmarkdown Blame HistoryRaw
📦 Turbo MoonBit cc1f595 k33g yesterday1# Référence : outils go
2
3> Description neutre de `.turbo-moonbit/tools.toml`, du menu MoonBit, et de ce que lancer une commande fait.
4
5## Fichier
6
7| Propriété | Valeur |
8| --- | --- |
9| Chemin | `./.turbo-moonbit/tools.toml` |
10| Recherche | Le répertoire de travail seulement. Les dossiers parents ne sont **pas** parcourus. |
11| Lecture | À chaque ouverture d'un de ses menus, pour les entrées |
12| Relecture | Dès que la taille ou la date de modification du fichier change, pour l'**ensemble** des menus |
13| Fichier absent | Pas une erreur |
14| Fichier illisible | Une erreur, signalée dans le menu |
15| Fichier utilisateur | **Aucun.** Contrairement aux snippets, il n'y a pas de `~/.config/turbo-moonbit/tools.toml`. |
16
17## Format du fichier
18
19Une table `[[tool]]` par commande.
20
21| Clé | Type | Obligatoire | Description |
22| --- | --- | --- | --- |
23| `name` | chaîne | oui | Ce que le menu affiche. Peut porter une touche d'accès écrite avec des tildes, comme `"~T~est"`. |
24| `command` | chaîne | oui | La commande shell à exécuter |
25| `output` | chaîne | non | Où va sa sortie : `popup`, `terminal` ou `editor`. Absent signifie `popup`. |
26| `menu` | chaîne | non | Dans quel menu il apparaît. Absent signifie `MoonBit`. N'importe quel nom ; le menu est créé pour vous. Peut porter une touche d'accès écrite avec des tildes. |
27
28`menu` n'est pas vérifié contre une liste, parce qu'il n'y en a pas : un nom qu'aucun autre outil n'emploie crée simplement un menu. Un outil sans `name`, sans `command`, ou dont l'`output` nomme quelque chose qui n'existe pas rend tout le fichier erroné. Un `output` inconnu est **refusé et non corrigé** : `"termnial"` aurait sinon l'air d'avoir fonctionné tout en envoyant la sortie ailleurs.
29
30### Exemple
31
32```toml
33[[tool]]
34name = "~T~est"
35command = "moon test"
36output = "popup"
37
38[[tool]]
39name = "~E~cho"
40command = "echo TADA"
41output = "terminal"
42menu = "Tools"
43```
44
45## Le fichier de départ
46
47**MoonBit ▸ Create tools file** écrit ces neuf entrées, dans cet ordre :
48
49| Nom | Commande | Sortie | Menu |
50| --- | --- | --- | --- |
51| `~C~heck` | `moon check` | `popup` | MoonBit |
52| `~F~ormat` | `moon fmt` | `popup` | MoonBit |
53| `~B~uild` | `moon build --target {{backend: wasm-gc, js, native, llvm or all...}}` | `popup` | MoonBit |
54| `~T~est` | `moon test` | `popup` | MoonBit |
55| `~R~un` | `moon run {{package, e.g. cmd/main}}` | `terminal` | MoonBit |
56| `~A~dd a dependency` | `moon add {{module, e.g. moonbitlang/x}}` | `popup` | MoonBit |
57| `~I~nterfaces` | `moon info` | `popup` | MoonBit |
58| `C~l~ean` | `moon clean` | `popup` | MoonBit |
59| `~E~cho` | `echo 🎉 tada!` | `terminal` | Tools |
60
61`Check` précède `Build` parce que c'est la commande qui répond « est-ce que ça tient ? » sans rien produire. Trois d'entre elles demandent une valeur avant de s'exécuter, et une nomme son propre `menu` : ces deux fonctionnalités sont invisibles si le fichier de départ ne les montre pas.
62
63Chaque outil nomme sa `output`, y compris ceux qui nomment la valeur par défaut : la clé est la partie intéressante du format, et un fichier où elle n'apparaît qu'une fois est un fichier où personne ne remarque qu'elle existe.
64
65L'entrée est grisée dès que le projet a un fichier d'outils : elle ne peut donc pas en écraser un. Le fichier est écrit via un fichier temporaire du même dossier, renommé en place.
66
67## Le menu MoonBit
68
69Toujours sur la barre, qu'un fichier d'outils existe ou non. Sa touche d'accès est `Alt-M`.
70
71| Entrée | Condition |
72| --- | --- |
73| Une ligne par outil sans `menu`, dans l'ordre du fichier | Le fichier en contient au moins un |
74| `Cannot read tools`, grisé | Le fichier est présent mais illisible |
75| `Create tools file` | Le projet n'a pas de fichier d'outils |
76| `Open tools file` | Le projet en a un |
77
78## Les menus qu'un outil réclame
79
80Un `menu` nommant autre chose que `Go` place sur la barre un menu de ce nom.
81
82| Propriété | Valeur |
83| --- | --- |
84| Position | Entre Go et Help |
85| Ordre | L'ordre où chaque nom apparaît pour la première fois dans le fichier |
86| Entrées | Une ligne par outil nommant ce menu, dans l'ordre du fichier. Rien d'autre — `Create tools file` et `Open tools file` restent dans MoonBit. |
87| Fichier illisible | Aucun menu ; c'est le menu MoonBit qui porte l'erreur |
88| Pendant que l'éditeur tourne | Ajoutés, retirés et renommés au fil des modifications du fichier, sans redémarrage |
89
90### Touches d'accès
91
92Attribuées automatiquement, parce qu'un nom venu d'un fichier ne peut pas être confronté à l'avance aux menus fixes.
93
94| Cas | Résultat |
95| --- | --- |
96| Aucun tilde dans le nom | La première lettre qu'aucun autre menu ne revendique est marquée. `Format` devient `For~m~at` : `F` est à File, `o` à Options, `r` à Run. |
97| Des tildes nommant une lettre libre | Conservés tels quels. `Doc~k~er` répond à `Alt-K`. |
98| Des tildes nommant une lettre prise | Abandonnés, et une lettre libre choisie à la place. `~F~oo` devient `F~o~o`. |
99| Toutes les lettres prises | Pas de touche d'accès. `F10` et la souris l'ouvrent quand même. |
100
101Les lettres que les menus de l'éditeur occupent sont `F`, `E`, `S`, `R`, `O`, `W`, `N` (Snippets), `G` et `H`.
102
103## Lancer une commande
104
105Commun à toutes les sorties :
106
107| Propriété | Valeur |
108| --- | --- |
109| Shell | `/bin/sh -c "<commande>"` sous Linux et macOS ; `cmd.exe /S /C "<commande>"` — le shell que nomme `%COMSPEC%` — sous Windows |
110| Répertoire | Celui depuis lequel l'éditeur a été lancé |
111| Erreur standard | Mêlée à la sortie standard, dans l'ordre où la commande les a écrites |
112
113Passer par un shell signifie que les tubes, les globs, `&&` et `;` fonctionnent : un outil peut être une séquence. Sous Windows le shell est cmd.exe, qui connaît `&&`, `|` et `>` mais ne développe pas les globs, et où `;` n'est pas un séparateur.
114
115### `output = "popup"`
116
117| Propriété | Valeur |
118| --- | --- |
119| Ouverture | Immédiate, avant la fin de la commande |
120| Modale | Oui : rien d'autre dans l'éditeur n'est utilisable tant qu'elle est là |
121| Remplissage | À mesure que la sortie arrive, en la suivant tant qu'on n'a pas remonté |
122| Titre pendant | `<commande> — running` |
123| Titre à la fin | `<commande> — ok`, ou `<commande> — exit <n>` |
124| Sortie vide, terminée | Affiche `(no output)` |
125| Sortie vide, en cours | N'affiche rien |
126| Plafond de sortie | 10000 lignes ; au-delà les plus anciennes partent et une ligne `… n earlier lines dropped …` le dit |
127
128| Touche | Effet |
129| --- | --- |
130| `↑` `↓` `Page↑` `Page↓` `Début` `Fin` | Parcourir la sortie |
131| Molette | Idem |
132| `Échap`, `Entrée`, **Close** | Fermer, en **arrêtant la commande** si elle tourne encore |
133
134Fermer arrête la commande parce qu'il n'y a pas d'autre moyen d'interrompre celle dont la sortie n'est pas dans un terminal.
135
136### `output = "terminal"`
137
138| Propriété | Valeur |
139| --- | --- |
140| Fenêtre | Une fenêtre terminal à elle, titrée avec la commande |
141| Environnement | Celui de l'éditeur, avec `TERM` à `xterm-256color` |
142| Après la sortie | La fenêtre reste, montrant sa sortie |
143| Modale | Non : l'éditeur continue à côté |
144
145Comme c'est un vrai terminal, les couleurs, la pagination, `Ctrl-C` et la lecture au clavier fonctionnent. Voir [Fenêtres terminal](terminal.md).
146
147Touches dans une fenêtre **terminée** :
148
149| Touche | Effet |
150| --- | --- |
151| `Maj-Page↑`, `Maj-Page↓` | Relire la sortie |
152| `Ctrl-W` | Fermer la fenêtre |
153| Tout le reste | Atteint l'éditeur, pas le shell mort |
154
155### `output = "editor"`
156
157| Propriété | Valeur |
158| --- | --- |
159| Affiche | Une popup pendant l'exécution, comme ci-dessus |
160| À la fermeture de la popup | Une fenêtre d'édition contenant la sortie, titrée avec la commande |
161| Remplie | Une fois, à la fin de la commande — pas au fil de l'eau |
162| La fenêtre | Une fenêtre d'édition ordinaire sans nom de fichier : cherchable avec `Ctrl-F`, et `Save as` la conserve |
163
164## Rechargement après une commande
165
166À la fin d'une commande, chaque fichier ouvert est examiné.
167
168| Le fichier | Ce qui se passe |
169| --- | --- |
170| Non modifié, et changé sur le disque | Relu ; son langage est redécidé et son titre rafraîchi |
171| Non modifié, et inchangé sur le disque | Laissé tel quel, non compté |
172| A des modifications non enregistrées | Laissé tel quel et compté comme ignoré |
173| N'a jamais reçu de nom | Laissé tel quel |
174| A disparu du disque | Laissé tel quel |
175
176Le curseur reste où il était, borné à ce que le fichier contient désormais. L'historique d'annulation est jeté, parce qu'annuler au-delà d'un rechargement restaurerait un texte que le fichier n'a plus.
177
178L'arbre du projet est rafraîchi au même moment.
179
180| Barre d'état | Quand |
181| --- | --- |
182| `Running <commande>` | La fenêtre s'ouvre |
183| `Reloaded 2 files` | Deux fichiers relus, aucun ignoré |
184| `Reloaded 2 files; 1 file with unsaved changes left alone` | Certains ont été ignorés |
185| `Command finished; 1 file with unsaved changes left alone` | Rien relu, quelque chose ignoré |
186
187## Erreurs
188
189| Message | Cause |
190| --- | --- |
191| `Cannot read tools` dans le menu | Le fichier est présent mais n'est pas du TOML valide, ou contient un outil sans nom ou sans commande |
192| `Already there: .turbo-moonbit/tools.toml` | Créer dans un projet qui en a déjà un. Inatteignable depuis le menu, qui grise l'entrée ; reste possible pour un appelant qui n'est pas un menu. |
193| `This project has no .turbo-moonbit/tools.toml yet.` | Ouvrir dans un projet qui n'en a pas, de même |
194| `Cannot tell which directory this is: …` | Le répertoire de travail n'a pas pu être lu |
195| `Terminal windows are not supported on this platform yet` | Lancer une commande dans un terminal exige un pseudo-terminal, que Linux, macOS et Windows possèdent ; voir [Fenêtres terminal](terminal.md) |
196
197## Demander une valeur
198
199Un `{{libellé}}` n'importe où dans une commande est une valeur que l'éditeur demande avant de lancer, dans une boîte portant le nom de l'outil. Le texte entre les accolades est ce que la boîte demande.
200
201| Écrit | Demandé | Substitué |
202| --- | --- | --- |
203| `{{chemin du module}}` | `chemin du module` | protégé pour le shell |
204| `{{options...}}` | `options` | tel quel |
205
206Une valeur est **protégée pour le shell** par défaut, si bien qu'un chemin contenant une espace reste un seul argument. Un `...` final à l'intérieur des accolades la demande telle quelle, ce qui permet à un seul champ de valoir plusieurs arguments.
207
208```toml
209[[tool]]
210name = "~I~nit module"
211command = "go mod init {{chemin du module}}"
212output = "popup"
213```
214
215| Règle | Comportement |
216| --- | --- |
217| Plusieurs libellés | Une boîte, un champ chacun, dans l'ordre où ils apparaissent |
218| Le même libellé deux fois | Un seul champ ; chaque occurrence reçoit ce qui y est tapé |
219| Un libellé écrit des deux façons | Demandé une fois ; chaque occurrence honore ses propres accolades |
220| Échap, ou Annuler | La commande n'est pas lancée |
221| Un champ laissé vide | Substitué par du vide — la commande dira elle-même ce qui lui manque |
222| Relancer l'outil | La boîte repart de ce qui avait été tapé, pour cette session seulement |
223| Plus de champs que l'écran n'en contient | Refusé, avec un message disant combien tiennent |
224
225**Deux accolades, pas une.** `awk '{print $1}'` et `find . -exec rm {} +` sont des commandes ordinaires, et une syntaxe à une accolade lirait la première comme une demande de valeur nommée `print $1`.
226
227Rien n'est écrit sur le disque. Une valeur que quelqu'un a tapée cet après-midi n'est pas une décision du projet, elle n'a donc rien à faire dans le répertoire du projet.
228
229### Erreurs
230
231| Erreur | Cause |
232| --- | --- |
233| `tool "X": "{{module" is never closed` | Une ouverture `{{` sans `}}` après elle |
234| `tool "X": {{}} asks for a value but does not say what it is` | Un libellé vide, ou réduit à `...` |
235
236Les deux sont refusées à la lecture du fichier : un libellé à moitié tapé n'atteint donc jamais le shell avec ses accolades.
237
238## Voir aussi
239
240- [Lancer les commandes moon depuis l'éditeur](../how-to/run-moon-commands.md)
241- [Outils MoonBit](../explanation/moonbit-tools.md)
242- [Fenêtres terminal](terminal.md)