turbo-editors/turbo-golopublic Fork 0
d710c1bba73df5d362f9462d12805186996ad134
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-golo.git
git clone ssh://git@rickub.com/turbo-editors/turbo-golo.git

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

run-golo-commands.md · 230 lines · 12.4 KBmarkdown Blame HistoryRaw
📦 Turbo Golo d710c1b k33g 20h ago1# Lancer des commandes Golo depuis l'éditeur
2
3Ce guide montre comment exécuter, tester, déboguer et compiler vos scripts sans quitter Turbo Golo. Il suppose que l'éditeur est installé et que vous avez un répertoire contenant un fichier `.golo`.
4
5## Obtenir un fichier de départ
6
7Lancez l'éditeur **depuis le répertoire où vivent vos scripts**, puis choisissez **Golo ▸ Create tools file** (`Alt-G`, puis `C`).
8
9Cela écrit `.turbo-golo/tools.toml` avec les commandes qu'un programmeur Golo lance le plus, et l'ouvre. Les trois premières :
10
11```toml
12[[tool]]
13name = "~R~un"
14# The interpreter, on the file you name. A terminal, not a popup: a script that
15# reads the keyboard has to be able to be answered, and one that runs long has
16# to be able to be interrupted.
17command = "golo {{script, e.g. main.golo}}"
18output = "terminal"
19
20[[tool]]
21name = "~T~est"
22# Every *_test.golo under the current directory, with gololang.Testing.
23command = "golo --test"
24output = "popup"
25
26[[tool]]
27name = "Test ~o~ne"
28command = "golo --test {{test file or directory}}"
29output = "popup"
30```
31
32Chaque `[[tool]]` devient une ligne du menu **Golo**, dans l'ordre d'apparition — sauf s'il nomme un `menu` à lui, ce qu'une section plus bas couvre. Le fichier est lu à chaque ouverture du menu, une modification prend donc effet immédiatement.
33
34## En lancer une
35
36`Alt-G`, puis la lettre entre les tildes — `R` pour exécuter, `T` pour tester.
37
38**Run** demande d'abord, parce que Golo n'a pas de manifeste qui dise quel fichier est le programme :
39
40```
41┌──────────────── Run ────────────────┐
42│ script, e.g. main.golo │
43│ [ ] │
44└─────────────────────────────────────┘
45```
46
47Tapez `main.golo` et appuyez sur `Entrée`. Une fenêtre de terminal s'ouvre et le script s'y exécute ; quand il finit la fenêtre reste, montrant ce qu'il a imprimé. Appuyez sur `Ctrl-W` pour la fermer. Relancez-le et la boîte se souvient du nom pour le reste de la session.
48
49**Test** ouvre aussitôt un **popup**, qui se remplit pendant que la commande tourne. Son titre porte la commande et, une fois finie, comment cela s'est passé :
50
51```
52┌──────────────── golo --test — ok ─────────────────┐
53│ 🧪 Running Golo tests... │
54│ │
55│ 📝 shapes_test.golo │
56│ ✓ a point describes itself │
57│ ✅ 1 test(s) passed │
58│ │
59│ [ Close ] │
60└────────────────────────────────────────────────────┘
61```
62
63| Touche | Effet |
64| --- | --- |
65| `↑` `↓` `PgUp` `PgDn` `Home` `End` | Parcourir la sortie |
66| `Échap` | Le fermer — et **arrêter la commande** si elle tourne encore |
67| `Entrée` | Le fermer |
68
69Une commande qui a réussi en silence affiche `(no output)` plutôt qu'une boîte vide, pour qu'on la distingue d'une commande qui n'a pas démarré.
70
71## Le reste du menu
72
73| Entrée | Ce qu'elle lance | Où |
74| --- | --- | --- |
75| **Debug** | `golo --debug <script>` — l'interpréteur avec son débogueur pas à pas | un terminal, parce que le débogueur lit le clavier |
76| **REPL** | `golo` — la boucle lire-évaluer-imprimer | un terminal |
77| **New script** | `golo new main --module <nom> --name <fichier>` — un programme de départ tiré du modèle de GoloScript | un popup ; le nouveau fichier apparaît dans l'arbre du projet |
78| **Build native** | `gogolo build -o <sortie> <script>` — Golo → Go → un exécutable natif | un popup ; il faut l'outillage Go |
79| **Build wasm** | `wagolo build -target=<wasi\|js\|wasip2> -o <sortie.wasm> <script>` — Golo → Go → TinyGo → WebAssembly | un popup ; il faut TinyGo, et `wasm-tools` pour `wasip2` |
80
81`Build native` peut prendre du temps : il lance le compilateur Go. Le popup est modal, pendant qu'il tourne vous ne pouvez taper nulle part ailleurs ; `Échap` le ferme et arrête la compilation.
82
83## Choisir où va la sortie
84
85Réglez `output` sur un outil :
86
87| `output` | Ce que vous obtenez |
88| --- | --- |
89| `popup` | Un dialogue qui se remplit pendant l'exécution. Le défaut. |
90| `terminal` | Une fenêtre de terminal : les couleurs, `Ctrl-C`, et le clavier atteint le programme |
91| `editor` | Une fenêtre d'édition une fois fini, pour fouiller avec `Ctrl-F` |
92
93`Run`, `Debug` et `REPL` sont en `terminal` dans le fichier de départ, et ils sont l'exemple de la raison d'être de la clé : un popup ne peut pas répondre à un script qui appelle `readln`, ne peut pas être interrompu par `Ctrl-C` pendant qu'`httpServe` écoute, et ne peut pas du tout être un REPL.
94
95Prenez `editor` quand la sortie est quelque chose à parcourir — le source Go que `gogolo transpile main.golo` imprime, ou un long rapport de tests que vous voulez fouiller.
96
97## Une commande longue retient l'éditeur
98
99Un popup est modal : pendant que `gogolo build` tourne, vous ne pouvez taper nulle part ailleurs. `Échap` le ferme et arrête la commande.
100
101Si cela gêne pour une commande donnée, donnez-lui `output = "terminal"` — la fenêtre est une fenêtre ordinaire et vous pouvez continuer à travailler à côté. C'est à cela que sert la clé configurable.
102
103## Ce qui arrive à vos fichiers ouverts
104
105Golo n'a pas de formateur, rien dans le fichier de départ ne réécrit donc le fichier que vous regardez. Mais `New script` écrit un nouveau fichier dans le répertoire, `gogolo build -keep-go` laisse un `.go` à côté de votre script, et un outil à vous peut faire n'importe quoi. Quand une commande se termine, l'éditeur **relit tous les fichiers ouverts qui n'ont pas de modifications non enregistrées**, un fichier qu'une autre commande a changé apparaît donc tel qu'il est désormais, et l'arbre du projet est rafraîchi pour qu'un nouveau fichier s'y montre. La barre d'état dit combien.
106
107Un fichier avec des modifications non enregistrées est **laissé tranquille**, et la barre d'état le dit aussi :
108
109```
110Reloaded 2 files; 1 file with unsaved changes left alone
111```
112
113C'est délibéré : votre modification et la commande sont réellement en désaccord, et ce n'est pas à l'éditeur de décider qui l'emporte. Enregistrez d'abord (`F2`) et relancez la commande, ou continuez à éditer.
114
115## Ajouter vos propres commandes
116
117Éditez `.turbo-golo/tools.toml`. Une commande va à `sh -c`, une entrée peut donc être une séquence entière :
118
119```toml
120[[tool]]
121name = "Test and ~b~uild"
122command = "golo --test && gogolo build -o bin/app main.golo"
123output = "popup"
124
125[[tool]]
126name = "~T~ranspile"
127command = "gogolo transpile {{script, e.g. main.golo}}"
128output = "editor"
129
130[[tool]]
131name = "Run in ~D~ocker"
132command = "docker run --rm -v \"$PWD:/app\" -w /app k33g/gololang:latest /golo ./{{script}}"
133output = "terminal"
134```
135
136Donnez à chacune une touche chaude entre tildes, et gardez-les distinctes — le menu répond à la première correspondance qu'il trouve.
137
138## Mettre un outil dans un menu à lui
139
140Un outil qui n'a rien à voir avec Golo n'a pas sa place dans le menu Golo. Donnez-lui un `menu` :
141
142```toml
143[[tool]]
144name = "~E~cho"
145command = "echo TADA"
146output = "terminal"
147menu = "Tools"
148
149[[tool]]
150name = "~U~p"
151command = "docker compose up -d"
152menu = "Docker"
153
154[[tool]]
155name = "~D~own"
156command = "docker compose down"
157menu = "Docker"
158```
159
160Cela vous donne un menu **Tools** et un menu **Docker** sur la barre, entre Golo et Help, dans l'ordre où les noms apparaissent pour la première fois dans le fichier. Docker contient ses deux outils. Rien à redémarrer : enregistrez le fichier et la barre suit.
161
162Le nom est à vous — il n'y a pas de liste où choisir. Omettez `menu` et l'outil reste dans Golo, où sont huit des neuf commandes de départ.
163
164### La touche chaude est choisie pour vous
165
166Vous ne pouvez pas savoir, en écrivant le fichier, quelles lettres les menus propres de l'éditeur ont prises. Il le calcule donc : la première lettre du nom que rien d'autre ne revendique reçoit les tildes.
167
168`Tools` obtient `Alt-T`, parce que `T` est libre. Un menu appelé `Format` obtiendrait `Alt-A`, parce que `F` est à File, `o` à Options et `r` à Run. Un menu appelé `Go` n'obtiendrait aucune touche du tout — `G` est à Golo et `O` à Options — et `F10` serait le chemin vers lui.
169
170Écrivez les tildes vous-même — `menu = "Doc~k~er"` — et une lettre libre est conservée. Une lettre prise ne l'est pas : la barre répond au *premier* menu qui correspond à une touche, honorer votre choix rendrait donc l'un des deux menus inatteignable. Il choisit une autre lettre et ne dit rien.
171
172## Variantes
173
174- **Vous avez un seul script et jamais un autre.** Remplacez `golo {{script, e.g. main.golo}}` par `golo main.golo`, et la boîte cesse d'apparaître. Le champ est là parce qu'un fichier de départ ne peut pas savoir quel fichier est le programme.
175- **Vous avez lancé l'éditeur depuis un sous-répertoire.** Les commandes s'y exécutent, et les chemins relatifs dans la boîte sont relatifs à lui. Partez du répertoire où sont les scripts.
176- **Le fichier contient une erreur.** Le menu affiche un `Cannot read tools` grisé à la place des commandes, et **Create tools file** est toujours là.
177- **`gogolo` ou `wagolo` n'est pas installé.** Le popup affiche `command not found` et `— exit 127`, ce qu'un shell aurait dit. L'`install.sh` de GoloScript installe les trois binaires ensemble ; un téléchargement de release en donne un à la fois.
178- **Vous voulez un menu du nom d'un qui existe.** `menu = "File"` vous donne un second menu File, plus loin sur la barre, avec une autre touche chaude. Rien ne l'empêche ; rien ne le recommande non plus.
179- **Votre menu n'a pas de touche chaude.** Toutes les lettres de son nom étaient déjà prises. `F10` et les flèches l'atteignent, et la souris aussi. Renommez-le avec une lettre libre.
180- **Vous avez mal orthographié la valeur d'`output`.** Tout le fichier est refusé et le menu dit `Cannot read tools`, en nommant l'outil et en listant ce que la valeur aurait pu être. Un repli silencieux aurait envoyé la sortie quelque part où vous ne l'aviez pas demandée.
181
182## Demander une valeur à l'exécution
183
184Six des commandes de départ le font déjà. Le motif est un `{{libellé}}` là où va la valeur :
185
186```toml
187[[tool]]
188name = "~N~ew script"
189command = "golo new main --module {{module name, e.g. hello.World}} --name {{file name without .golo}}"
190output = "popup"
191```
192
193La choisir ouvre une boîte titrée **New script** avec deux champs, un par `{{…}}`, dans leur ordre d'apparition. **Tab** passe de l'un à l'autre, **Entrée** lance la commande. Échap, et rien ne se lance.
194
195La valeur est citée, un chemin avec un espace reste donc un seul argument.
196
197### Un champ pour plusieurs arguments
198
199Citer est faux quand on veut dire « mets ceci à la fin ». Ajoutez `...` dans les accolades et la valeur passe telle quelle :
200
201```toml
202[[tool]]
203name = "Run with ~a~rguments"
204command = "golo main.golo {{arguments...}}"
205output = "terminal"
206```
207
208Tapez `--verbose input.txt` et les deux atteignent le script comme des arguments séparés — `args` dans `function main = |args|` les contient.
209
210### La même valeur deux fois
211
212Écrivez le libellé deux fois ; on vous la demande une fois :
213
214```toml
215[[tool]]
216name = "~C~ompile and run"
217command = "gogolo build -o /tmp/app {{script}} && /tmp/app"
218```
219
220### Variantes
221
222- **La valeur est la même la plupart du temps.** Lancez une fois et la boîte se souvient de ce que vous avez tapé, pour le reste de la session. Ce n'est pas écrit sur le disque.
223- **Votre commande a déjà des accolades.** `awk '{print $1}'` et `find . -exec rm {} +` sont laissés tranquilles : seules les doubles accolades demandent quelque chose.
224- **La commande demande plus de valeurs qu'il n'en tient à l'écran.** L'éditeur le dit plutôt que d'ouvrir une boîte dont le bouton OK est sous le bas du terminal. Agrandissez le terminal, ou coupez la commande en deux outils.
225
226## Voir aussi
227
228- Chaque clé du fichier et chaque règle : [Référence des outils Golo](../reference/golo-tools.md)
229- Pourquoi Run vient en premier, et pourquoi un fichier non modifié se recharge : [Outils Golo](../explanation/golo-tools.md)
230- Les fenêtres dans lesquelles les commandes tournent : [Fenêtres de terminal](../reference/terminal.md)