De ClickLock van Windows, voor macOS

Houd de knop vast.
Laat los. Hij blijft staan.

Selecteer drie pagina’s tekst, of sleep een bestand over twee schermen, zonder de muisknop de hele weg vast te houden. Nog één klik laat los. Werkt met een muis en met het trackpad.

Download voor macOS Broncode op GitHub

Versie 0.1.0 · 517 KB · Apple silicon · macOS 14 of nieuwer

Houd de muisknop ergens in dit paneel ingedrukt. Er vult zich een ring om de aanwijzer. Blijf vasthouden tot hij sluit en laat dan los: de knop blijft ingedrukt wat deze pagina betreft. Beweeg de aanwijzer met niets ingedrukt en de tekst selecteert zichzelf, zoals elke app op je Mac zich gedraagt zodra ClickLatch de knop heeft. Nog één klik en hij laat weer los.

Houd de knop hier ingedrukt

Gereed.

Een nabootsing van het echte werk, in de browser. Met een toetsenbord: geef het paneel focus en houd Spatie ingedrukt.

Niet in de weg

Een icoon in de menubalk en verder niets. Geen Dock-icoon, geen venster voor je werk.

Laat nooit een knop hangen

Bij afsluiten, bij uitzetten, bij een ingetrokken toestemming: er gaat altijd een laatste mouse-up uit.

Er verlaat niets je Mac

Het enige verzoek dat het ooit doet gaat naar GitHub, om te vragen of er een nieuwere versie is.

Van jou om te lezen

GPL-3, elke regel op GitHub, tot en met de code die het icoon van de app zelf tekent.

Functies

Wat je krijgt

Je eigen drukduur

Van 200 tot 2200 ms, standaard een seconde. Een oefenveld in de instellingen laat een vullende balk zien terwijl je drukt en vertelt je hoe lang je laatste druk werkelijk was.

Een ring om de aanwijzer

Hij vult zich terwijl je drukt en sluit tot een hele ring op het moment dat de knop vastklikt. Kleur, dikte, grootte, vertraging en het vervagen zijn allemaal van jou, of zet hem uit en vergrendel onzichtbaar.

Een geluid als hij pakt

Tink bij het vastzetten, Pop bij het loslaten, gekozen uit de geluiden die macOS al meelevert, elk met een eigen volume en een knop om het voor te beluisteren.

Muis of trackpad

Hetzelfde gebaar op allebei, omdat de app op de gebeurtenissen werkt in plaats van op de hardware. De rechterknop kan ook vastzetten, als je daarom vraagt.

Vangnetten, als je ze wilt

Niet vastzetten als de muis beweegt tijdens het drukken. Escape laten loslaten. Vanzelf loslaten na een paar seconden. Allemaal standaard uit, en met alles uit is het gedrag precies dat van Windows.

Houdt zichzelf bij

Kijkt één keer per dag bij GitHub of er een nieuwe uitgave is, installeert die op verzoek, en weigert elke build die niet met dezelfde sleutel is ondertekend als de kopie die je draait.

Werking

Hoe het werkt

Een CGEventTap op sessieniveau herschrijft drie dingen onderweg. Er wordt niets nagebootst, en geen enkele app hoeft ervan te weten.

Eén druk, van je hand tot de app Drie banen op één tijdlijn. Je hand drukt, houdt vast voorbij de drempel, laat los, beweegt de aanwijzer en klikt opnieuw. ClickLatch vult de ring, slikt de mouse-up in, herschrijft bewegingen als slepen, en maakt van de tweede klik de mouse-up die het achterhield. Elke andere app ziet één ononderbroken druk, van de eerste mouse-down tot die laatste mouse-up. Druk Drempel Loslaten Beweeg Klik weer Je hand ClickLatch Elke app knop ingedrukt niets ingedrukt 1 2 3 ring vult zich slikt hem in beweging wordt slepen geeft hem door mouse-down mouse-up één ononderbroken druk
De tweede en derde baan zijn de hele truc: wat je hand doet en wat elke andere app gelooft houden op met overeenkomen op het moment dat je loslaat.
  1. 1

    Je laat los, laat

    Voorbij de drempel vastgehouden wordt de mouseUp ingeslikt. Wat macOS betreft is de knop nog steeds ingedrukt.

  2. 2

    Je beweegt de aanwijzer

    Elke mouseMoved wordt herschreven tot een mouseDragged, dus elke app ziet gewoon slepen: selecteren, verplaatsen, van formaat veranderen.

  3. 3

    Je klikt opnieuw

    Die mouseDown wordt de mouseUp die werd achtergehouden. Het slepen eindigt precies waar je klikte.

Een eigen thread

De tap draait op een eigen thread met een eigen run loop, zodat een drukke hoofdthread hem nooit kan laten verlopen. Zet macOS hem toch uit, dan zet de app hem meteen weer aan. De ring is een apart klik-doorlatend venster, aangestuurd door een display link, zodat het tekenen ervan de tap niet kan vertragen.

De regel die het nooit breekt

Sluit de app af, zet hem uit of neem de toestemming weg, en er gaat onderweg naar buiten nog een laatste mouseUp uit. Een muisknop kan nooit blijven hangen.

Schermafbeeldingen

Een blik naar binnen

Het tabblad General van de instellingen van ClickLatch: een schakelaar om het aan te zetten, een schuifregelaar van Short naar Long met de drempel in milliseconden, en een oefenveld.

De drukduur, met een oefenveld dat je laatste druk in milliseconden meldt.

Elke instelling met een waarde heeft een kleine ⟲ ernaast die juist die ene instelling terugzet op de fabriekswaarde.

Aan de slag

Installeren

  1. Download ClickLatch 0.1.0

    Een .zip van 517 KB, rechtstreeks uit de GitHub-uitgave. Apple silicon, macOS 14 of nieuwer. Liever de uitgavepagina zien?

  2. Pak het uit en sleep ClickLatch.app naar je map Programma’s.

  3. macOS weigert de eerste keer om hem te openen. De build is ondertekend, maar met een zelfondertekend certificaat in plaats van een van Apple, en hij is niet genotariseerd. Gatekeeper wantrouwt daardoor alles wat via een browser binnenkwam. Dat is te verwachten, geen teken dat er iets mis is. Wis de quarantainevlag één keer en hij opent daarna gewoon:

    xattr -dr com.apple.quarantine /Applications/ClickLatch.app
    open /Applications/ClickLatch.app

    Liever niet aan Terminal? Dubbelklik de app, laat macOS hem blokkeren, open dan Systeeminstellingen → Privacy en beveiliging, scrol omlaag naar de melding over ClickLatch en klik op Toch openen.

Eén toestemming, en waarom

ClickLatch moet muisgebeurtenissen wijzigen, en macOS staat dat alleen toe met de toestemming Toegankelijkheid. Kies Grant Accessibility permission… in het menubalkicoon, of zet ClickLatch zelf aan onder Systeeminstellingen → Privacy en beveiliging → Toegankelijkheid. Zet daarna Enable ClickLatch aan in datzelfde menu.

macOS koppelt die toestemming aan de handtekening van de app. Een gedownloade build houdt dezelfde handtekening bij updates, dus de toestemming blijft staan.

Veelgestelde vragen

Vragen

Heeft macOS dit niet al?

Er is een eigen Drag Lock, op het trackpad, voor wie sleept door te tikken. Die doet niets voor een muis, een trackball of een joystickmuis, en de drukduur ervan is niet te wijzigen. ClickLatch versus de Drag Lock van macOS behandelt wat de ingebouwde variant doet, wanneer die genoeg is, en wat je gebruikt als dat niet zo is.

In welke apps werkt het niet?

Apps die de knopstand rechtstreeks uitlezen, met NSEvent.pressedMouseButtons, in plaats van sleepgebeurtenissen te volgen, merken de vergrendeling niet. Geen enkele event tap ziet ook iets binnen beveiligde invoercontexten: wachtwoordvelden en het inlogvenster. En Mission Control, van Space wisselen of een uitstapje naar de menubalk kan een actieve vergrendeling laten vallen.

Stuurt het iets ergens heen?

Alleen een verzoek aan de releases-API van GitHub, één keer per dag, om te vragen wat de nieuwste versie is, en alleen zolang het controleren op updates aanstaat. Er gaat niets over jou, je klikken of je toetsenbord ergens heen. Zet je Escape releases a lock aan, dan worden toetsaanslagen langs de app geleid. Hij kijkt naar niets anders dan Escape, laat al het overige onaangeroerd door, en bewaart er niets van.

Waarom blokkeert macOS de download?

Omdat de app niet door Apple is genotariseerd. Notariseren vereist een betaald Apple Developer-account, en dit is een gratis app die er geen heeft. De build is ondertekend, met een zelfondertekend certificaat, en dat is wat de toestemming voor Toegankelijkheid en het zelf bijwerken laat werken. Eén keer de quarantainevlag wissen, zoals hierboven, is alles wat nodig is.

Ik heb een Intel-Mac.

De download is gebouwd voor Apple silicon. Bouw hem op een Intel-Mac uit de broncode met de stappen hierboven. De code zelf heeft niets architectuurgebondens.

Werkt het met een trackpad?

Ja. Druk en houd vast op het trackpad zoals je met een muisknop zou doen. De app werkt op de gebeurtenissen die macOS maakt, dus het maakt hem niet uit waar die vandaan komen.

Hoe kom ik er weer vanaf?

Sluit het af via het menubalkicoon en sleep ClickLatch.app naar de prullenmand. Wil je helemaal opruimen, verwijder het dan uit Systeeminstellingen → Privacy en beveiliging → Toegankelijkheid met de knop .

Probeer het een dag.

Lange selecties en lang slepen zijn dan niet langer iets waar je je op schrap voor zet.

Download voor macOS

Versie 0.1.0 · Apple silicon · macOS 14 of nieuwer

Feedback

Vertel wat je ervan vindt

Iets kapot, een idee of een vraag. Het komt hoe dan ook bij me terecht.