J’en avais assez de ne pas pouvoir faire deux `⌘C`, alors j’ai transformé le presse-papiers de macOS en 3 presse-papiers — DualClip
(github.com/RAKKUNN)Bonjour ! En découvrant macOS pour la première fois, j’ai créé ce mini-projet, DualClip, et je vous le présente aujourd’hui.
C’est la première fois que j’écris ce genre de billet, alors je suis un peu nerveux. Merci d’être indulgents si certaines phrases sont maladroites 🙇
De quoi s’agit-il ?
C’est simplement une petite app de barre de menus qui ajoute 3 « slots » de presse-papiers.
Slot A → presse-papiers par défaut (⌘C / ⌘V)
Slot B → ⌥⌘C / ⌥⌘V
Slot C → ⌃⌘C / ⌃⌘V
Ce n’est pas une approche « historique » comme Paste ou Maccy, mais une approche par « slots ».
Vous pouvez épingler dans B des éléments que vous utilisez souvent, comme un e-mail ou un nom de variable, tout en continuant à faire vos copier-coller habituels avec ⌘C/⌘V.
Pourquoi je l’ai créé
Quand on fait du refactoring ou de la traduction, il suffit d’appuyer une fois de trop sur ⌘C pour écraser ce qu’on avait copié juste avant.
À force, accumulé sur une journée, ça devient un vrai petit stress.
J’ai aussi essayé des apps d’historique, mais il y avait quelques points qui me gênaient.
- le temps supplémentaire pour ouvrir un popup et choisir est trop lent
- pour retrouver « pas celui d’avant, mais celui encore avant », il faut de toute façon le repérer visuellement
- moi, je voulais simplement que
⌥⌘Vcolle immédiatement le bon contenu
Donc au lieu d’empiler les fonctionnalités, j’ai gardé une idée toute simple : « on fixe le contenu dans un slot et on le récupère avec un raccourci ».
La partie la plus amusante à développer (Atomic Paste)
C’était plus compliqué que prévu, car sur macOS, ⌘V lit obligatoirement le presse-papiers système.
Donc pour coller le contenu du Slot B, il faut temporairement remplacer le presse-papiers système, ce qui ferait normalement disparaître ce qui avait été copié avec ⌘C.
J’ai longtemps réfléchi à la bonne façon de résoudre ça.
Au final, j’ai fait fonctionner ça dans cet ordre.
- sauvegarder d’abord le presse-papiers système actuel (copie profonde de tous les types)
- le remplacer par le contenu du Slot B
- simuler
⌘VviaCGEvent - restaurer 150 ms plus tard l’original sauvegardé
Tout ce cycle se termine en moins de 150 ms, donc à l’usage on ne perçoit même pas que « ce qui avait été copié avec ⌘C a brièvement disparu ».
J’appelle ça tout seul « Atomic Paste »… (j’étais assez fier d’avoir trouvé le nom 😅).
Le réglage du timing pour suspendre brièvement le polling et ignorer changeCount m’a vraiment pris beaucoup de temps.
Je suis resté bloqué un bon moment à me demander : « pourquoi le Slot A se transforme en contenu du Slot B… ? »
Autres petits détails :
- prise en charge du texte / des images / des fichiers / du RTF (copie profonde de
NSPasteboardItem) - ne fonctionne pas du tout dans les champs de mot de passe (vérification de
IsSecureEventInputEnabled) - remplissage à zéro de la mémoire des slots à la fermeture (
memset_s) - tous les raccourcis sont personnalisables (merci à
sindresorhus/KeyboardShortcuts)
Côté confidentialité
Comme les apps de presse-papiers manipulent des données sensibles, c’est le point auquel j’ai le plus fait attention.
- rien n’est écrit sur le disque, tout reste uniquement en RAM
- il n’y a tout simplement aucun code réseau, pas même pour vérifier les mises à jour ou faire de la télémétrie
- c’est open source sous licence MIT, vous pouvez donc aller vérifier par vous-mêmes
Pour l’essayer
Le plus simple est probablement d’utiliser Homebrew.
brew install RAKKUNN/tap/dualclip
Sinon, vous pouvez aussi récupérer le zip depuis GitHub Releases et le placer dans /Applications.
La build est notarisée par Apple (notarization), donc aucun avertissement ne s’affichera au premier lancement.
GitHub: https://github.com/RAKKUNN/DualClip
Prérequis : macOS 13+ (Apple Silicon), autorisation d’accessibilité
C’est ma toute première app macOS, donc il y a certainement encore beaucoup de choses maladroites.
Si vous avez des retours du genre « ce serait mieux comme ça » ou « une erreur se produit ici », je vous en serais vraiment reconnaissant.
N’hésitez pas à laisser un commentaire !
Passez tous une excellente journée !!
4 commentaires
Ditto, un programme de gestion du presse-papiers pour Windows, fonctionne lui aussi de manière similaire à ce que vous avez implémenté.
Je pense que cela pourrait être une bonne référence pour trouver des pistes d’amélioration~
Merci pour l’info !🙇🙇
Je vais y jeter un œil et envisager d’en retenir certaines parties !
Ce serait bien d’ajouter aussi une fonction d’enregistrement, comme Clipy.
Avez-vous un besoin plutôt orienté historique ou snippets ?
Mais l’historique ne correspond pas à l’orientation de DualClip.
Je m’efforce de le rendre aussi léger et pratique que possible.
Merci pour votre retour.