RemoteFilePanel appelait sftp.listdir_attr/mkdir/rename/remove/chmod/get
directement depuis le thread GUI : un dossier distant lent ou une latence
reseau gelait toute l'interface. Seuls upload/download passaient deja par un
thread dedie (TransferWorker), et celui-ci reutilisait le meme SFTPClient que
la navigation - paramiko.SFTPClient n'est pas concu pour etre pilote par
plusieurs threads a la fois.
- app/sftp/worker.py : SftpWorker, un thread proprietaire exclusif d'un canal
SFTP, avec une file de jobs (callables) et les resultats renvoyes par signal
Qt (marshalling automatique vers le thread GUI).
- RemoteFilePanel soumet desormais toutes ses operations via ce worker avec
callbacks succes/erreur ; un compteur de generation ignore les reponses de
navigations devenues obsoletes (double-clic rapide, edition puis navigation
ailleurs pendant le renvoi).
- TransferWorker ouvre son propre canal SFTP (`sftp_factory`) au lieu de
partager celui de la navigation : un gros transfert ne bloque plus le
listage de dossiers. SFTPPanel(sftp, transfer_sftp_factory=...) permet
d'injecter ce second canal (paramiko.SFTPClient.from_transport) ; a defaut,
le canal de navigation est reutilise tel quel (cas des tests).
- SessionTabWidget/SFTPTabWidget ouvrent ce second canal et appellent
SFTPPanel.shutdown() a la fermeture de l'onglet (arrete proprement les
threads avant destruction des widgets).
tests/test_sftp.py adapte pour pomper la boucle d'evenements Qt apres les
operations desormais asynchrones (meme couverture, timing different).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Le terminal n'avait aucun copier-coller : impossible de selectionner du texte
a la souris ni de coller une commande. C'est la fonction la plus basique d'un
terminal et de loin le manque le plus penible a l'usage.
- selection a la souris avec surlignage, suivant le theme actif
- double-clic : selectionne le mot sous le curseur
- Ctrl+Shift+C / Ctrl+Shift+V, Maj+Inser, clic molette, menu au clic droit
- Ctrl+C reste l'interruption : les raccourcis du presse-papiers sont traites
avant la conversion Ctrl+lettre, sinon Ctrl+Shift+C serait parti comme un
Ctrl+C vers le shell
- au collage, les fins de ligne sont normalisees en retour chariot ; un \r\n
enverrait une ligne vide supplementaire au shell
La suite de tests vivait dans un dossier temporaire et aurait ete perdue : elle
rejoint le depot dans tests/ avec un lanceur. Elle couvre le presse-papiers, la
detection d'hote, la logique SFTP sur serveur simule et la construction de
l'application.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>