Bibliotheque de commandes organisee par categories (Linux/Docker/Proxmox
fournis en exemples au premier lancement, librement modifiables), avec
recherche.
- app/snippets.py : Snippet/SnippetStore, meme pattern que les autres stores
(JSON atomique, schema_version).
- SnippetManagerDialog : creer/modifier/supprimer/rechercher, regroupe par
categorie.
- Integration terminal : le dernier commit du depot a delibrement fait du
clic droit un raccourci de collage (style terminal Unix), sans menu
contextuel. Plutot que d'ecraser ce choix recent, les snippets passent par
un bouton dedie "📋 Snippets" dans la barre de l'onglet (SessionTabWidget et
LocalTerminalTabWidget), avec un menu Categorie -> Snippet -> Action
(Inserer dans le terminal / Executer / Executer avec Multi-Send).
"Inserer" n'envoie jamais Entree (le texte est ecrit, a l'utilisateur de
valider) ; seul "Executer" l'ajoute.
- BroadcastManager.broadcast_now() : diffusion explicite et ponctuelle vers
tous les terminaux, independante de l'etat du bouton Multi (utilisee par
"Executer avec Multi-Send", qui est une action volontaire et pas une frappe
clavier a relayer).
- La construction du menu (_build_snippets_menu) est separee de son
affichage (_show_snippets_menu) : testable sans declencher l'appel
bloquant menu.exec().
tests/test_snippets.py : stockage (CRUD, recherche, categories, persistance)
et integration terminal (inserer/executer/multi-send, construction et
declenchement du menu), avec LocalTerminalConnection.start() neutralisee.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
main_window.py concentrait la fenetre principale, l'arbre des sessions, les 4
classes d'onglets, la detection de commandes ssh et le multi-send : 983 lignes
et une seule classe qui pilotait toute l'application.
- app/services/ssh_target.py : detection d'une cible ssh dans un terminal (pur,
sans dependance Qt)
- app/ui/tabs.py : BaseTerminalTab / SessionTabWidget / SFTPTabWidget /
LocalTerminalTabWidget (deplaces tels quels)
- app/controllers/session_controller.py : panneau lateral (arbre sessions +
terminaux locaux) et CRUD des sessions
- app/controllers/connection_controller.py : cycle de vie des onglets
(ouverture, connexion rapide, renommage, fermeture)
- app/controllers/broadcast_manager.py : bouton et logique du mode Multi-Send
main_window.py ne fait plus que construire ces composants et les relier par
signaux (983 -> ~200 lignes). Comportement inchange ; MainWindow.tabs et
detect_ssh_target restent importables depuis app.main_window pour la
compatibilite avec les tests existants.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>