Votre propre durée d’appui
De 200 à 2200 ms, une seconde par défaut. Un pavé d’essai dans les réglages montre une barre qui se remplit pendant que vous appuyez et vous indique la durée réelle de votre dernier appui.
Le ClickLock de Windows, pour macOS
Sélectionnez trois pages de texte, ou faites glisser un fichier sur deux écrans, sans tenir le bouton de la souris tout du long. Un clic de plus relâche. Fonctionne avec une souris et avec le trackpad.
Maintenez le bouton de la souris enfoncé n’importe où dans ce panneau. Un anneau se remplit autour du pointeur. Continuez jusqu’à ce qu’il se ferme, puis lâchez : le bouton reste enfoncé, du point de vue de cette page. Déplacez le pointeur sans rien tenir et le texte se sélectionne tout seul, comme se comporte chaque application de votre Mac une fois que ClickLatch tient le bouton. Un clic de plus et il relâche.
Maintenez le bouton ici
Prêt.
Une reproduction du comportement réel, dans le navigateur. Au clavier : donnez le focus au panneau et maintenez Espace.
Une icône dans la barre des menus et rien d’autre. Pas d’icône dans le Dock, pas de fenêtre devant votre travail.
À la fermeture, à l’extinction, sur une autorisation retirée : un dernier mouse-up part toujours.
La seule requête qu’il fasse jamais va à GitHub, pour demander s’il existe une version plus récente.
GPL-3, chaque ligne sur GitHub, jusqu’au code qui dessine l’icône de l’application.
Fonctions
De 200 à 2200 ms, une seconde par défaut. Un pavé d’essai dans les réglages montre une barre qui se remplit pendant que vous appuyez et vous indique la durée réelle de votre dernier appui.
Il se remplit pendant que vous maintenez et se ferme complètement au moment où le bouton se verrouille. Couleur, épaisseur, taille, délai et estompage vous appartiennent, ou désactivez-le et verrouillez sans rien voir.
Tink au verrouillage, Pop au relâchement, choisis parmi les sons que macOS fournit déjà, chacun avec son propre volume et un bouton d’écoute.
Le même geste sur les deux, parce que l’application agit sur les évènements plutôt que sur le matériel. Le bouton droit peut aussi se verrouiller, si vous le demandez.
Ne pas verrouiller si la souris bouge pendant l’appui. Laisser Échap relâcher. Relâcher tout seul après quelques secondes. Tout est désactivé par défaut, et ainsi désactivé le comportement est exactement celui de Windows.
Consulte GitHub une fois par jour pour voir s’il existe une nouvelle version, l’installe à la demande, et refuse tout build qui n’est pas signé avec la même clé que la copie que vous utilisez.
Mécanisme
Un CGEventTap au niveau de la session réécrit trois choses
au passage. Rien n’est simulé, et aucune application n’a besoin de le savoir.
Maintenu au-delà du seuil, le mouseUp est avalé. Pour macOS, le bouton est
toujours enfoncé.
Chaque mouseMoved est réécrit en mouseDragged, si bien que
chaque application voit un glissement ordinaire : sélection, déplacement,
redimensionnement.
Ce mouseDown devient le mouseUp qui avait été retenu. Le
glissement se termine exactement là où vous avez cliqué.
Le tap tourne sur un fil dédié avec sa propre run loop, de sorte qu’un fil principal chargé ne peut jamais provoquer son expiration. Si macOS le désactive malgré tout, l’application le réactive aussitôt. L’anneau est une fenêtre distincte, transparente aux clics, pilotée par un display link, pour que son tracé ne puisse pas ralentir le tap.
Quittez l’application, désactivez-la ou retirez-lui son autorisation, et elle envoie un
dernier mouseUp en partant. Un bouton de souris ne peut jamais rester
suspendu.
Captures

La durée d’appui, avec un pavé d’essai qui indique votre dernier appui en millisecondes.

Un aperçu en direct en haut montre chaque changement immédiatement : en cours d’appui sur fond sombre, verrouillé sur fond clair.

Les garde-fous, tous désactivés par défaut, et un bouton qui remet tout en place.
Chaque réglage qui porte une valeur a un petit ⟲ à côté qui remet ce seul réglage à sa valeur d’origine.
Pour commencer
Décompressez-le et faites glisser ClickLatch.app dans votre dossier Applications.
macOS refusera de l’ouvrir la première fois. Le build est signé, mais avec un certificat auto-signé plutôt qu’un certificat délivré par Apple, et il n’est pas notarisé. Gatekeeper considère donc comme suspect tout ce qui est passé par un navigateur. C’est attendu, ce n’est pas le signe d’un problème. Effacez une fois l’attribut de quarantaine et il s’ouvrira normalement ensuite :
xattr -dr com.apple.quarantine /Applications/ClickLatch.app
open /Applications/ClickLatch.app
Vous préférez éviter le Terminal ? Double-cliquez l’application, laissez macOS la bloquer, puis ouvrez Réglages Système → Confidentialité et sécurité, descendez jusqu’à la mention de ClickLatch et cliquez sur Ouvrir quand même.
Il vous faut Xcode ou les outils en ligne de commande de Xcode. Compiler vous-même vous donne aussi un build pour votre propre Mac, Intel compris.
git clone https://github.com/joelvalentijn/clicklatch.git
cd clicklatch
./Scripts/create-signing-certificate.sh
./Scripts/bundle.sh --install --run
Le premier script crée une fois pour toutes un certificat auto-signé pour signer le code. Passez-le et tout compile quand même, mais la signature est alors ad hoc : son identité est le hachage de ce build précis, donc macOS abandonne l’autorisation d’accessibilité à chaque recompilation et l’application ne peut pas se mettre à jour. Avec le certificat, ces deux problèmes disparaissent.
ClickLatch doit modifier les évènements de la souris, et macOS ne le permet qu’avec l’autorisation Accessibilité. Choisissez Grant Accessibility permission… dans l’icône de la barre des menus, ou activez ClickLatch vous-même sous Réglages Système → Confidentialité et sécurité → Accessibilité. Activez ensuite Enable ClickLatch dans ce même menu.
macOS lie cette autorisation à la signature de l’application. Un build téléchargé conserve la même signature d’une mise à jour à l’autre, l’autorisation reste donc en place.
Questions fréquentes
Il a son propre Drag Lock, sur le trackpad, pour qui fait glisser en tapotant. Il ne fait rien pour une souris, un trackball ou une souris joystick, et sa durée d’appui n’est pas modifiable. ClickLatch face au Drag Lock de macOS explique ce que fait la version intégrée, quand elle suffit, et quoi utiliser quand ce n’est pas le cas.
Les applications qui lisent directement l’état du bouton, avec
NSEvent.pressedMouseButtons, au lieu de suivre les évènements de glissement,
ne remarquent pas le verrouillage. Aucun event tap ne voit non plus quoi que ce soit dans
les contextes de saisie sécurisée : champs de mot de passe et fenêtre d’ouverture de
session. Et Mission Control, un changement d’espace ou un passage par la barre des menus
peuvent faire tomber un verrouillage actif.
Uniquement une requête à l’API des publications de GitHub, une fois par jour, pour demander quelle est la dernière version, et seulement tant que la vérification des mises à jour est active. Rien vous concernant, ni vos clics, ni votre clavier ne part où que ce soit. Si vous activez Escape releases a lock, les frappes passent par l’application. Elle n’examine rien d’autre qu’Échap, laisse tout le reste passer intact, et n’en conserve rien.
Parce que l’application n’est pas notarisée par Apple. La notarisation exige un compte Apple Developer payant, et il s’agit d’une application gratuite qui n’en a pas. Le build est signé, avec un certificat auto-signé, et c’est ce qui fait fonctionner l’autorisation d’accessibilité et la mise à jour automatique. Effacer une fois l’attribut de quarantaine, comme montré plus haut, suffit.
Le téléchargement est compilé pour Apple silicon. Sur un Mac Intel, compilez-le depuis les sources avec les étapes ci-dessus. Le code lui-même n’a rien de lié à une architecture.
Oui. Appuyez et maintenez sur le trackpad comme vous le feriez avec un bouton de souris. L’application agit sur les évènements que macOS produit, peu lui importe donc ce qui les a produits.
Quittez-la depuis l’icône de la barre des menus et faites glisser ClickLatch.app
vers la corbeille. Pour un nettoyage complet, retirez-la depuis Réglages Système →
Confidentialité et sécurité → Accessibilité avec le bouton –.
Les longues sélections et les longs glissements cessent d’être quelque chose que l’on appréhende.
Feedback
Quelque chose de cassé, une idée ou une question. Cela me parvient dans tous les cas.