Copier-coller a la souris comme dans un terminal Unix

Selectionner copie aussitot au relachement du bouton, et le clic droit colle
directement. Plus de menu contextuel ni de raccourci a connaitre : c'est le
comportement des terminaux Unix et de PuTTY.

- selection relachee, et double-clic sur un mot, copient dans la foulee
- clic droit et clic molette collent immediatement
- un simple clic sans deplacement se contente d'annuler la selection, sans
  toucher au presse-papiers : sinon il ecraserait ce qu'on s'apprete a coller
- le menu contextuel est supprime, le clic droit etant desormais un collage
- "Tout selectionner" passe sur Ctrl+Maj+A, Ctrl+A restant "debut de ligne"
  pour le shell

Les raccourcis clavier restent disponibles pour qui les prefere.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
snoopy
2026-09-04 16:30:17 +02:00
parent fbf7f580bc
commit f641357073
3 changed files with 58 additions and 25 deletions

View File

@@ -88,5 +88,39 @@ t.clear_selection()
assert not t.has_selection()
print(" OK")
print()
print("=== 9. Souris : selection = copie, clic droit = collage (comme sous Unix) ===")
from PySide6.QtGui import QMouseEvent, QContextMenuEvent
from PySide6.QtCore import QPointF
def clic(bouton, col, row, type_evt=QEvent.MouseButtonPress):
pos = QPointF(col * t.char_w + 1, row * t.char_h + 1)
return QMouseEvent(type_evt, pos, pos, bouton, bouton, Qt.NoModifier)
QApplication.clipboard().setText("")
t.mousePressEvent(clic(Qt.LeftButton, 0, 1))
t._sel_focus = (14, 1)
t.mouseReleaseEvent(clic(Qt.LeftButton, 14, 1, QEvent.MouseButtonRelease))
print(" selection relachee -> presse-papiers :", repr(QApplication.clipboard().text()))
assert QApplication.clipboard().text() == "serveur-test-01", "la selection doit copier sans raccourci"
envoye.clear()
t.mousePressEvent(clic(Qt.RightButton, 5, 0))
print(" clic droit -> envoye au shell :", envoye)
assert envoye == [b"serveur-test-01"], "le clic droit doit coller directement"
QApplication.clipboard().setText("a-conserver")
t.mousePressEvent(clic(Qt.LeftButton, 3, 0))
t.mouseReleaseEvent(clic(Qt.LeftButton, 3, 0, QEvent.MouseButtonRelease))
assert QApplication.clipboard().text() == "a-conserver", "un simple clic ne doit rien ecraser"
print(" simple clic -> presse-papiers intact")
ev = QContextMenuEvent(QContextMenuEvent.Mouse, QPoint(10, 10), QPoint(10, 10))
t.contextMenuEvent(ev)
assert not ev.isAccepted(), "aucun menu contextuel ne doit s'ouvrir"
print(" clic droit -> aucun menu contextuel")
print()
print("COPIER/COLLER : TOUS LES TESTS OK")