bambouville

Pavé de gestes

Le pavé de gestes est une pastille flottante à portée du pouce, pour travailler sans clavier physique : faites-la glisser pour déclencher des macros propres à l'app — ou, quand un agent de code attend, ses véritables options d'invite — et touchez deux fois pour dicter. Sur iPhone, c'est une saisie de base, active par défaut ; sur iPad, elle est optionnelle, sous réglages → expérimental → pavé de gestes.

La pastille

  • coin par défaut — l'endroit où la pastille se pose au démarrage à froid, jusqu'à ce que vous la déplaciez ; la dernière position est retenue, et recadrée quand l'orientation ou la taille de l'écran change.
  • taille de la pastille — compact (44 pt), standard (52 pt) ou grand (64 pt).
  • appui long saisit la pastille ; elle reste là où vous la relâchez (en restant entièrement à l'écran).

Sur iPhone, le menu radial se dessine en éventail d'angle — les mêmes pétales sur un quart d'arc, à portée du pouce — et disparaît en paysage tant que le clavier est affiché. La grande taille est réservée à l'iPad.

Gestes

Trois gestes distincts :

  • toucher, maintenir et faire glisser — ouvre le menu radial autour de la pastille. Relâchez dans une direction pour déclencher cette macro ; relâchez dans la zone morte pour annuler.
  • double touche — démarre la dictée.
  • appui long — déplace la pastille.

Profils

Les pétales du menu radial viennent de profils comparés au processus au premier plan du volet actif (via pane_current_command de tmux, ou des instantanés ps en ssh simple). Les profils sont évalués de haut en bas ; la première correspondance l'emporte.

Profils intégrés :

profil droite gauche haut
claude code 1↵ approuver 3↵ refuser 2↵ toujours
codex cli y esc p
fallback (toujours actif)

Le profil fallback correspond à tout et n'assigne rien — la dictée fonctionne quand même.

Les profils personnalisés reçoivent un comparateur de processus (texte littéral ou motif regex:) et peuvent déclarer des règles de détection des agents — regex des invites bloquantes et de l'invite au repos, une regex des options de menu, et des modèles de réponse avec les emplacements {index} / {shortcut} — qui alimentent aussi le centre d'agents. Un profil dont les règles sont invalides retombe sur « état indisponible ».

Les libellés des pétales suivent les rôles des invites d'agent — droite = approuver, gauche = refuser, haut = toujours, bas = bas ; les pétales non assignés sont masqués.

Options d'agent en direct

Avec le centre d'agents activé et son hook d'état installé sur l'hôte, le pavé cesse de deviner : tant qu'un agent Claude Code ou Codex est en attente d'une saisie dans le volet actif, les pétales affichent les vraies options de l'invite — les libellés viennent du menu lui-même, teintés selon leur sens (vert approuver, rouge refuser, ambre toujours) — et la pastille pulse en ambre. Tant que l'agent est en cours, le pavé propose un pétale rouge d'interruption (esc) et un pétale neutre de changement de mode (shift-tab).

Quand une invite compte plus d'options que le pavé n'a de directions, un pétale plus ouvre l'invite complète dans le centre d'agents — et toute option que vous avez habituée à une direction conserve cette direction, si bien que les balayages appris à l'aveugle gardent le sens qu'ils ont toujours eu. Sans preuve du hook, le pavé retombe sur les profils statiques ci-dessus.

Le langage des macros

Les macros s'écrivent dans une petite spécification :

  • les caractères littéraux sont envoyés tels quels,
  • pour Entrée,
  • esc, \e ou \x1b pour Échap,
  • shift-tab pour Maj-Tab,
  • \t (ou tab), \r, \n,
  • \xNN pour un octet arbitraire en hexadécimal.

Dictée

Touchez deux fois la pastille pour dicter dans le terminal. La reconnaissance a lieu sur l'appareil (SFSpeechRecognizer) — aucun audio ne quitte l'appareil. Elle utilise la langue de votre appareil, et retombe sur en-US quand la reconnaissance sur l'appareil n'y est pas disponible ; elle exige les autorisations micro et reconnaissance vocale. Pendant la dictée, la pastille se transforme en pilule micro avec une forme d'onde en direct et un chronomètre ; touchez pour valider, ✕ pour annuler.

Options (réglages → expérimental) :

  • valider après un silence — envoi automatique après 1,2 s de silence,
  • ajouter un retour — terminer par Entrée,
  • forme d'onde en direct sur la pastille.