turbo-editors/turbo-gopublic Fork 0
main
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-go.git
git clone ssh://git@rickub.com/turbo-editors/turbo-go.git

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

📦 Turbo Go 3d7798b · on main · k33g · 12h ago
go-tools.md · 236 lines · 11.3 KBmarkdown
Blame HistoryOpen raw

Référence : outils go

Description neutre de .turbo-go/tools.toml, du menu Go, et de ce que lancer une commande fait.

Fichier

Propriété Valeur
Chemin ./.turbo-go/tools.toml
Recherche Le répertoire de travail seulement. Les dossiers parents ne sont pas parcourus.
Lecture À chaque ouverture d'un de ses menus, pour les entrées
Relecture Dès que la taille ou la date de modification du fichier change, pour l'ensemble des menus
Fichier absent Pas une erreur
Fichier illisible Une erreur, signalée dans le menu
Fichier utilisateur Aucun. Contrairement aux snippets, il n'y a pas de ~/.config/turbo-go/tools.toml.

Format du fichier

Une table [[tool]] par commande.

Clé Type Obligatoire Description
name chaîne oui Ce que le menu affiche. Peut porter une touche d'accès écrite avec des tildes, comme "~T~est".
command chaîne oui La commande shell à exécuter
output chaîne non Où va sa sortie : popup, terminal ou editor. Absent signifie popup.
menu chaîne non Dans quel menu il apparaît. Absent signifie Go. N'importe quel nom ; le menu est créé pour vous. Peut porter une touche d'accès écrite avec des tildes.

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.

Exemple

[[tool]]
name = "~T~est"
command = "go test ./..."
output = "popup"

[[tool]]
name = "~E~cho"
command = "echo TADA"
output = "terminal"
menu = "Tools"

Le fichier de départ

Go ▸ Create tools file écrit ces cinq, dans cet ordre :

Nom Commande Sortie
Format gofmt -l -w . popup
Lint go vet ./... popup
Build go build ./... popup
Test go test ./... popup
Run go run . terminal

Aucun ne nomme de menu, donc les cinq sont dans le menu Go. Chacun nomme son output, y compris les quatre qui nomment le 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.

L'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.

Le menu Go

Toujours sur la barre, qu'un fichier d'outils existe ou non. Sa touche d'accès est Alt-G.

Entrée Condition
Une ligne par outil sans menu, dans l'ordre du fichier Le fichier en contient au moins un
Cannot read tools, grisé Le fichier est présent mais illisible
Create tools file Le projet n'a pas de fichier d'outils
Open tools file Le projet en a un

Les menus qu'un outil réclame

Un menu nommant autre chose que Go place sur la barre un menu de ce nom.

Propriété Valeur
Position Entre Go et Help
Ordre L'ordre où chaque nom apparaît pour la première fois dans le fichier
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 Go.
Fichier illisible Aucun menu ; c'est le menu Go qui porte l'erreur
Pendant que l'éditeur tourne Ajoutés, retirés et renommés au fil des modifications du fichier, sans redémarrage

Touches d'accès

Attribuées automatiquement, parce qu'un nom venu d'un fichier ne peut pas être confronté à l'avance aux menus fixes.

Cas Résultat
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.
Des tildes nommant une lettre libre Conservés tels quels. Doc~k~er répond à Alt-K.
Des tildes nommant une lettre prise Abandonnés, et une lettre libre choisie à la place. ~F~oo devient F~o~o.
Toutes les lettres prises Pas de touche d'accès. F10 et la souris l'ouvrent quand même.

Les lettres que les menus de l'éditeur occupent sont F, E, S, R, O, W, N (Snippets), G et H.

Lancer une commande

Commun à toutes les sorties :

Propriété Valeur
Shell /bin/sh -c "<commande>" sous Linux et macOS ; cmd.exe /S /C "<commande>" — le shell que nomme %COMSPEC% — sous Windows
Répertoire Celui depuis lequel l'éditeur a été lancé
Erreur standard Mêlée à la sortie standard, dans l'ordre où la commande les a écrites

Passer 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.

output = "popup"

Propriété Valeur
Ouverture Immédiate, avant la fin de la commande
Modale Oui : rien d'autre dans l'éditeur n'est utilisable tant qu'elle est là
Remplissage À mesure que la sortie arrive, en la suivant tant qu'on n'a pas remonté
Titre pendant <commande> — running
Titre à la fin <commande> — ok, ou <commande> — exit <n>
Sortie vide, terminée Affiche (no output)
Sortie vide, en cours N'affiche rien
Plafond de sortie 10000 lignes ; au-delà les plus anciennes partent et une ligne … n earlier lines dropped … le dit
Touche Effet
Page↑ Page↓ Début Fin Parcourir la sortie
Molette Idem
Échap, Entrée, Close Fermer, en arrêtant la commande si elle tourne encore

Fermer 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.

output = "terminal"

Propriété Valeur
Fenêtre Une fenêtre terminal à elle, titrée avec la commande
Environnement Celui de l'éditeur, avec TERM à xterm-256color
Après la sortie La fenêtre reste, montrant sa sortie
Modale Non : l'éditeur continue à côté

Comme c'est un vrai terminal, les couleurs, la pagination, Ctrl-C et la lecture au clavier fonctionnent. Voir Fenêtres terminal.

Touches dans une fenêtre terminée :

Touche Effet
Maj-Page↑, Maj-Page↓ Relire la sortie
Ctrl-W Fermer la fenêtre
Tout le reste Atteint l'éditeur, pas le shell mort

output = "editor"

Propriété Valeur
Affiche Une popup pendant l'exécution, comme ci-dessus
À la fermeture de la popup Une fenêtre d'édition contenant la sortie, titrée avec la commande
Remplie Une fois, à la fin de la commande — pas au fil de l'eau
La fenêtre Une fenêtre d'édition ordinaire sans nom de fichier : cherchable avec Ctrl-F, et Save as la conserve

Rechargement après une commande

À la fin d'une commande, chaque fichier ouvert est examiné.

Le fichier Ce qui se passe
Non modifié, et changé sur le disque Relu ; son langage est redécidé et son titre rafraîchi
Non modifié, et inchangé sur le disque Laissé tel quel, non compté
A des modifications non enregistrées Laissé tel quel et compté comme ignoré
N'a jamais reçu de nom Laissé tel quel
A disparu du disque Laissé tel quel

Le 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.

L'arbre du projet est rafraîchi au même moment.

Barre d'état Quand
Running <commande> La fenêtre s'ouvre
Reloaded 2 files Deux fichiers relus, aucun ignoré
Reloaded 2 files; 1 file with unsaved changes left alone Certains ont été ignorés
Command finished; 1 file with unsaved changes left alone Rien relu, quelque chose ignoré

Erreurs

Message Cause
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
Already there: .turbo-go/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.
This project has no .turbo-go/tools.toml yet. Ouvrir dans un projet qui n'en a pas, de même
Cannot tell which directory this is: … Le répertoire de travail n'a pas pu être lu
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

Demander une valeur

Un {{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.

Écrit Demandé Substitué
{{chemin du module}} chemin du module protégé pour le shell
{{options...}} options tel quel

Une 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.

[[tool]]
name = "~I~nit module"
command = "go mod init {{chemin du module}}"
output = "popup"
Règle Comportement
Plusieurs libellés Une boîte, un champ chacun, dans l'ordre où ils apparaissent
Le même libellé deux fois Un seul champ ; chaque occurrence reçoit ce qui y est tapé
Un libellé écrit des deux façons Demandé une fois ; chaque occurrence honore ses propres accolades
Échap, ou Annuler La commande n'est pas lancée
Un champ laissé vide Substitué par du vide — la commande dira elle-même ce qui lui manque
Relancer l'outil La boîte repart de ce qui avait été tapé, pour cette session seulement
Plus de champs que l'écran n'en contient Refusé, avec un message disant combien tiennent

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.

Rien 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.

Erreurs

Erreur Cause
tool "X": "{{module" is never closed Une ouverture {{ sans }} après elle
tool "X": {{}} asks for a value but does not say what it is Un libellé vide, ou réduit à ...

Les deux sont refusées à la lecture du fichier : un libellé à moitié tapé n'atteint donc jamais le shell avec ses accolades.

Voir aussi

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# Référence : outils go

> Description neutre de `.turbo-go/tools.toml`, du menu Go, et de ce que lancer une commande fait.

## Fichier

| Propriété | Valeur |
| --- | --- |
| Chemin | `./.turbo-go/tools.toml` |
| Recherche | Le répertoire de travail seulement. Les dossiers parents ne sont **pas** parcourus. |
| Lecture | À chaque ouverture d'un de ses menus, pour les entrées |
| Relecture | Dès que la taille ou la date de modification du fichier change, pour l'**ensemble** des menus |
| Fichier absent | Pas une erreur |
| Fichier illisible | Une erreur, signalée dans le menu |
| Fichier utilisateur | **Aucun.** Contrairement aux snippets, il n'y a pas de `~/.config/turbo-go/tools.toml`. |

## Format du fichier

Une table `[[tool]]` par commande.

| Clé | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `name` | chaîne | oui | Ce que le menu affiche. Peut porter une touche d'accès écrite avec des tildes, comme `"~T~est"`. |
| `command` | chaîne | oui | La commande shell à exécuter |
| `output` | chaîne | non | Où va sa sortie : `popup`, `terminal` ou `editor`. Absent signifie `popup`. |
| `menu` | chaîne | non | Dans quel menu il apparaît. Absent signifie `Go`. N'importe quel nom ; le menu est créé pour vous. Peut porter une touche d'accès écrite avec des tildes. |

`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.

### Exemple

```toml
[[tool]]
name = "~T~est"
command = "go test ./..."
output = "popup"

[[tool]]
name = "~E~cho"
command = "echo TADA"
output = "terminal"
menu = "Tools"
```

## Le fichier de départ

**Go ▸ Create tools file** écrit ces cinq, dans cet ordre :

| Nom | Commande | Sortie |
| --- | --- | --- |
| Format | `gofmt -l -w .` | `popup` |
| Lint | `go vet ./...` | `popup` |
| Build | `go build ./...` | `popup` |
| Test | `go test ./...` | `popup` |
| Run | `go run .` | `terminal` |

Aucun ne nomme de `menu`, donc les cinq sont dans le menu Go. Chacun nomme son `output`, y compris les quatre qui nomment le 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.

L'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.

## Le menu Go

Toujours sur la barre, qu'un fichier d'outils existe ou non. Sa touche d'accès est `Alt-G`.

| Entrée | Condition |
| --- | --- |
| Une ligne par outil sans `menu`, dans l'ordre du fichier | Le fichier en contient au moins un |
| `Cannot read tools`, grisé | Le fichier est présent mais illisible |
| `Create tools file` | Le projet n'a pas de fichier d'outils |
| `Open tools file` | Le projet en a un |

## Les menus qu'un outil réclame

Un `menu` nommant autre chose que `Go` place sur la barre un menu de ce nom.

| Propriété | Valeur |
| --- | --- |
| Position | Entre Go et Help |
| Ordre | L'ordre où chaque nom apparaît pour la première fois dans le fichier |
| 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 Go. |
| Fichier illisible | Aucun menu ; c'est le menu Go qui porte l'erreur |
| Pendant que l'éditeur tourne | Ajoutés, retirés et renommés au fil des modifications du fichier, sans redémarrage |

### Touches d'accès

Attribuées automatiquement, parce qu'un nom venu d'un fichier ne peut pas être confronté à l'avance aux menus fixes.

| Cas | Résultat |
| --- | --- |
| 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. |
| Des tildes nommant une lettre libre | Conservés tels quels. `Doc~k~er` répond à `Alt-K`. |
| Des tildes nommant une lettre prise | Abandonnés, et une lettre libre choisie à la place. `~F~oo` devient `F~o~o`. |
| Toutes les lettres prises | Pas de touche d'accès. `F10` et la souris l'ouvrent quand même. |

Les lettres que les menus de l'éditeur occupent sont `F`, `E`, `S`, `R`, `O`, `W`, `N` (Snippets), `G` et `H`.

## Lancer une commande

Commun à toutes les sorties :

| Propriété | Valeur |
| --- | --- |
| Shell | `/bin/sh -c "<commande>"` sous Linux et macOS ; `cmd.exe /S /C "<commande>"` — le shell que nomme `%COMSPEC%` — sous Windows |
| Répertoire | Celui depuis lequel l'éditeur a été lancé |
| Erreur standard | Mêlée à la sortie standard, dans l'ordre où la commande les a écrites |

Passer 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.

### `output = "popup"`

| Propriété | Valeur |
| --- | --- |
| Ouverture | Immédiate, avant la fin de la commande |
| Modale | Oui : rien d'autre dans l'éditeur n'est utilisable tant qu'elle est là |
| Remplissage | À mesure que la sortie arrive, en la suivant tant qu'on n'a pas remonté |
| Titre pendant | `<commande> — running` |
| Titre à la fin | `<commande> — ok`, ou `<commande> — exit <n>` |
| Sortie vide, terminée | Affiche `(no output)` |
| Sortie vide, en cours | N'affiche rien |
| Plafond de sortie | 10000 lignes ; au-delà les plus anciennes partent et une ligne `… n earlier lines dropped …` le dit |

| Touche | Effet |
| --- | --- |
| `↑` `↓` `Page↑` `Page↓` `Début` `Fin` | Parcourir la sortie |
| Molette | Idem |
| `Échap`, `Entrée`, **Close** | Fermer, en **arrêtant la commande** si elle tourne encore |

Fermer 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.

### `output = "terminal"`

| Propriété | Valeur |
| --- | --- |
| Fenêtre | Une fenêtre terminal à elle, titrée avec la commande |
| Environnement | Celui de l'éditeur, avec `TERM` à `xterm-256color` |
| Après la sortie | La fenêtre reste, montrant sa sortie |
| Modale | Non : l'éditeur continue à côté |

Comme c'est un vrai terminal, les couleurs, la pagination, `Ctrl-C` et la lecture au clavier fonctionnent. Voir [Fenêtres terminal](terminal.md).

Touches dans une fenêtre **terminée** :

| Touche | Effet |
| --- | --- |
| `Maj-Page↑`, `Maj-Page↓` | Relire la sortie |
| `Ctrl-W` | Fermer la fenêtre |
| Tout le reste | Atteint l'éditeur, pas le shell mort |

### `output = "editor"`

| Propriété | Valeur |
| --- | --- |
| Affiche | Une popup pendant l'exécution, comme ci-dessus |
| À la fermeture de la popup | Une fenêtre d'édition contenant la sortie, titrée avec la commande |
| Remplie | Une fois, à la fin de la commande — pas au fil de l'eau |
| La fenêtre | Une fenêtre d'édition ordinaire sans nom de fichier : cherchable avec `Ctrl-F`, et `Save as` la conserve |

## Rechargement après une commande

À la fin d'une commande, chaque fichier ouvert est examiné.

| Le fichier | Ce qui se passe |
| --- | --- |
| Non modifié, et changé sur le disque | Relu ; son langage est redécidé et son titre rafraîchi |
| Non modifié, et inchangé sur le disque | Laissé tel quel, non compté |
| A des modifications non enregistrées | Laissé tel quel et compté comme ignoré |
| N'a jamais reçu de nom | Laissé tel quel |
| A disparu du disque | Laissé tel quel |

Le 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.

L'arbre du projet est rafraîchi au même moment.

| Barre d'état | Quand |
| --- | --- |
| `Running <commande>` | La fenêtre s'ouvre |
| `Reloaded 2 files` | Deux fichiers relus, aucun ignoré |
| `Reloaded 2 files; 1 file with unsaved changes left alone` | Certains ont été ignorés |
| `Command finished; 1 file with unsaved changes left alone` | Rien relu, quelque chose ignoré |

## Erreurs

| Message | Cause |
| --- | --- |
| `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 |
| `Already there: .turbo-go/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. |
| `This project has no .turbo-go/tools.toml yet.` | Ouvrir dans un projet qui n'en a pas, de même |
| `Cannot tell which directory this is: …` | Le répertoire de travail n'a pas pu être lu |
| `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) |

## Demander une valeur

Un `{{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.

| Écrit | Demandé | Substitué |
| --- | --- | --- |
| `{{chemin du module}}` | `chemin du module` | protégé pour le shell |
| `{{options...}}` | `options` | tel quel |

Une 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.

```toml
[[tool]]
name = "~I~nit module"
command = "go mod init {{chemin du module}}"
output = "popup"
```

| Règle | Comportement |
| --- | --- |
| Plusieurs libellés | Une boîte, un champ chacun, dans l'ordre où ils apparaissent |
| Le même libellé deux fois | Un seul champ ; chaque occurrence reçoit ce qui y est tapé |
| Un libellé écrit des deux façons | Demandé une fois ; chaque occurrence honore ses propres accolades |
| Échap, ou Annuler | La commande n'est pas lancée |
| Un champ laissé vide | Substitué par du vide — la commande dira elle-même ce qui lui manque |
| Relancer l'outil | La boîte repart de ce qui avait été tapé, pour cette session seulement |
| Plus de champs que l'écran n'en contient | Refusé, avec un message disant combien tiennent |

**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`.

Rien 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.

### Erreurs

| Erreur | Cause |
| --- | --- |
| `tool "X": "{{module" is never closed` | Une ouverture `{{` sans `}}` après elle |
| `tool "X": {{}} asks for a value but does not say what it is` | Un libellé vide, ou réduit à `...` |

Les deux sont refusées à la lecture du fichier : un libellé à moitié tapé n'atteint donc jamais le shell avec ses accolades.

## Voir aussi

- [Lancer les commandes go depuis l'éditeur](../how-to/run-go-commands.md)
- [Outils go](../explanation/go-tools.md)
- [Fenêtres terminal](terminal.md)