Skip to content
English

Commandes ​

Une action de l'IDE (enregistrer, exécuter, basculer le thème, fusionner une branche…) est décrite une seule fois, comme une Command (src/commands/types.ts). La barre de menus, la palette de commandes et les raccourcis clavier en sont tous dérivés : ajouter une commande la rend disponible partout, avec le même libellé et le même raccourci.

Une commande ​

ChampRôle
ididentifiant stable (file.save), utilisé par les menus
category, title(), iconaffichage (le titre est traduit à chaque affichage)
keybindingraccourci(s) en notation CodeMirror : Mod-s, Mod-Shift-f, F1 (Mod = Cmd sur macOS, Ctrl ailleurs)
keybindingScopeglobal (défaut), outsideText (pas dans l'éditeur ni un champ : Ctrl+Z), native (affiché seulement : Ctrl+C)
enabled()la commande est-elle utilisable (fichier exécutable ouvert…) ? Désactivée : grisée dans les menus, absente de la palette, raccourci sans effet
checked()option cochée (thème, langue, police) : menuitemradio dans un groupe, menuitemcheckbox sinon
run()l'action

Le catalogue (catalog.ts) assemble les commandes à partir des stores et des composables (useProject, useGitActions). Ses sources sont réévaluées quand elles changent : une commande par branche Git, par langue, par police.

Registre ​

App.vue crée le registre (createCommandRegistry(createCommandSources())), le fournit à l'application (provideCommands) et installe les raccourcis (useKeybindings). Un composant y accède par useCommands() et lance une commande par run(id). Dans les tests, withCommands(Composant) (tests/helpers/commands.ts) fournit le registre.

Raccourcis ​

useKeybindings écoute le clavier en phase de capture, avant les composants et CodeMirror : chaque touche n'a qu'un gestionnaire. Une fenêtre modale ouverte (aria-modal) garde ses touches. Le keymap de CodeMirror ne contient que l'édition elle-même (indentation, historique, commentaire, Échap pour fermer la recherche).

Barre de menus ​

menus.ts décrit les menus par identifiants de commandes, séparateurs, groupes titrés et sous-menus hiérarchiques ({ submenu: MessageKey, items: [...] }). MenuBar.vue suit le motif WAI-ARIA menubar : un seul élément atteignable par Tab, ←/→ entre les menus de premier niveau, ↓/↑, Entrée ou Espace pour ouvrir, ↑/↓, Début, Fin dans un menu, et → / ← ou Échap pour naviguer dans et hors des sous-menus (Thème, Langue, Police d'écriture). Les raccourcis sont annoncés par aria-keyshortcuts.

Éditeurs ​

Les commandes d'édition (annuler, copier, rechercher…) s'adressent à l'éditeur du volet actif : chaque CodeEditor enregistre à son montage un EditorController dans le store editor (registerEditor), que editorStore.undo(), openSearch()… appellent directement.

Ajouter une commande ​

  1. L'ajouter à une source de catalog.ts, avec un titre traduit (t('commands.…')).
  2. Si elle doit figurer dans un menu, ajouter son id dans menus.ts.

tests/interface/commands.spec.ts vérifie que chaque entrée de menu existe et qu'aucun raccourci n'est attribué deux fois.