Die ClickLock von Windows, für macOS

Taste halten.
Loslassen. Sie bleibt unten.

Markiere drei Seiten Text oder zieh eine Datei über zwei Bildschirme, ohne die Maustaste den ganzen Weg zu halten. Ein weiterer Klick lässt los. Funktioniert mit Maus und mit Trackpad.

Für macOS herunterladen Quelltext auf GitHub

Version 0.1.0 · 517 KB · Apple Silicon · macOS 14 oder neuer

Halte die Maustaste irgendwo in diesem Feld gedrückt. Um den Zeiger füllt sich ein Ring. Halte weiter, bis er sich schließt, und lass dann los: die Taste bleibt unten, soweit es diese Seite betrifft. Bewege den Zeiger, ohne etwas zu halten, und der Text markiert sich von selbst, so wie sich jede App auf deinem Mac verhält, sobald ClickLatch die Taste hat. Ein weiterer Klick, und sie lässt wieder los.

Taste hier gedrückt halten

Bereit.

Eine Nachbildung des Originals, im Browser. Mit Tastatur: gib dem Feld den Fokus und halte die Leertaste.

Nicht im Weg

Ein Symbol in der Menüleiste und sonst nichts. Kein Dock-Symbol, kein Fenster vor deiner Arbeit.

Lässt nie eine Taste hängen

Beim Beenden, beim Ausschalten, bei entzogener Berechtigung: ein letztes Mouse-up geht immer hinaus.

Nichts verlässt deinen Mac

Die einzige Anfrage, die es je stellt, geht an GitHub, um nach einer neueren Version zu fragen.

Deins zum Nachlesen

GPL-3, jede Zeile auf GitHub, bis hin zum Code, der das Symbol der App selbst zeichnet.

Funktionen

Was du bekommst

Deine eigene Haltedauer

Von 200 bis 2200 ms, standardmäßig eine Sekunde. Ein Übungsfeld in den Einstellungen zeigt einen sich füllenden Balken, während du drückst, und sagt dir, wie lang dein letzter Druck tatsächlich war.

Ein Ring um den Zeiger

Er füllt sich, während du hältst, und schließt sich zum vollen Ring in dem Moment, in dem die Taste einrastet. Farbe, Stärke, Größe, Verzögerung und Ausblenden gehören alle dir, oder schalte ihn aus und raste unsichtbar ein.

Ein Ton, wenn es greift

Tink beim Einrasten, Pop beim Lösen, ausgewählt aus den Tönen, die macOS ohnehin mitbringt, jeder mit eigener Lautstärke und einer Taste zum Vorhören.

Maus oder Trackpad

Dieselbe Geste auf beiden, weil die App auf den Ereignissen arbeitet statt auf der Hardware. Auch die rechte Taste kann einrasten, wenn du darum bittest.

Sicherheitsnetze, wenn du sie willst

Nicht einrasten, wenn sich die Maus beim Halten bewegt. Escape lösen lassen. Nach ein paar Sekunden von selbst loslassen. Alles standardmäßig aus, und mit allem aus ist das Verhalten genau das von Windows.

Hält sich selbst aktuell

Sieht einmal täglich bei GitHub nach einer neuen Version, installiert sie auf Wunsch, und weist jeden Build zurück, der nicht mit demselben Schlüssel signiert ist wie die Kopie, die du benutzt.

Mechanik

So funktioniert es

Ein CGEventTap auf Sitzungsebene schreibt unterwegs drei Dinge um. Nichts wird simuliert, und keine App muss davon wissen.

Ein Druck, von deiner Hand bis zur App Drei Spuren auf einer Zeitachse. Deine Hand drückt, hält über die Schwelle hinaus, lässt los, bewegt den Zeiger und klickt erneut. ClickLatch füllt den Ring, schluckt das Mouse-up, schreibt Bewegungen als Ziehen um und macht aus dem zweiten Klick das Mouse-up, das es zurückgehalten hat. Jede andere App sieht einen einzigen ununterbrochenen Druck, vom ersten Mouse-down bis zu diesem letzten Mouse-up. Druck Schwelle Loslassen Bewegen Erneut klicken Deine Hand ClickLatch Jede App Taste gehalten nichts gehalten 1 2 3 Ring füllt sich schluckt es Bewegung wird Ziehen gibt es weiter Mouse-down Mouse-up ein ununterbrochener Druck
Die zweite und die dritte Spur sind der ganze Trick: was deine Hand tut und was jede andere App glaubt, hören in dem Moment auf übereinzustimmen, in dem du loslässt.
  1. 1

    Du lässt los, spät

    Über die Schwelle hinaus gehalten, wird das mouseUp geschluckt. Für macOS ist die Taste weiterhin unten.

  2. 2

    Du bewegst den Zeiger

    Jedes mouseMoved wird zu einem mouseDragged umgeschrieben, also sieht jede App ein gewöhnliches Ziehen: markieren, verschieben, Größe ändern.

  3. 3

    Du klickst erneut

    Dieses mouseDown wird zu dem mouseUp, das zurückgehalten wurde. Das Ziehen endet genau dort, wo du geklickt hast.

Ein eigener Thread

Der Tap läuft auf einem eigenen Thread mit eigener Run Loop, damit ein ausgelasteter Haupt-Thread ihn nie in eine Zeitüberschreitung treiben kann. Schaltet macOS ihn trotzdem ab, schaltet die App ihn sofort wieder an. Der Ring ist ein eigenes, klickdurchlässiges Fenster, gesteuert von einem Display Link, damit sein Zeichnen den Tap nicht bremsen kann.

Die Regel, die es nie bricht

Beende die App, schalte sie aus oder nimm ihr die Berechtigung, und sie schickt auf dem Weg hinaus ein letztes mouseUp. Eine Maustaste kann nie hängen bleiben.

Bildschirmfotos

Ein Blick hinein

Der Tab General in den Einstellungen von ClickLatch: ein Schalter zum Aktivieren, ein Regler von Short bis Long mit der Schwelle in Millisekunden, und ein Übungsfeld.

Die Haltedauer, mit einem Übungsfeld, das deinen letzten Druck in Millisekunden meldet.

Jede Einstellung mit einem Wert hat ein kleines ⟲ daneben, das genau diese eine Einstellung auf den Auslieferungswert zurücksetzt.

Erste Schritte

Installation

  1. ClickLatch 0.1.0 herunterladen

    Ein .zip mit 517 KB, direkt aus der GitHub-Veröffentlichung. Apple Silicon, macOS 14 oder neuer. Lieber die Veröffentlichungsseite ansehen?

  2. Entpacke es und zieh ClickLatch.app in deinen Programme-Ordner.

  3. macOS wird sich beim ersten Mal weigern, sie zu öffnen. Der Build ist signiert, aber mit einem selbst signierten Zertifikat statt einem von Apple, und er ist nicht notarisiert. Gatekeeper hält deshalb alles für verdächtig, was durch einen Browser kam. Das ist zu erwarten und kein Zeichen dafür, dass etwas nicht stimmt. Lösch das Quarantäne-Merkmal einmal, danach öffnet sie sich ganz normal:

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

    Lieber nicht ins Terminal? Doppelklick die App, lass macOS sie blockieren, öffne dann Systemeinstellungen → Datenschutz und Sicherheit, scroll zum Hinweis über ClickLatch und klick auf Trotzdem öffnen.

Eine Berechtigung, und warum

ClickLatch muss Mausereignisse verändern, und macOS erlaubt das nur mit der Berechtigung Bedienungshilfen. Wähle Grant Accessibility permission… im Menüleistensymbol, oder schalte ClickLatch selbst unter Systemeinstellungen → Datenschutz und Sicherheit → Bedienungshilfen ein. Aktiviere danach Enable ClickLatch im selben Menü.

macOS bindet diese Berechtigung an die Signatur der App. Ein heruntergeladener Build behält seine Signatur über Aktualisierungen hinweg, die Berechtigung bleibt also bestehen.

Häufige Fragen

Fragen

Hat macOS das nicht schon?

Es hat eine eigene Drag Lock, auf dem Trackpad, für alle, die durch Tippen ziehen. Für eine Maus, einen Trackball oder eine Joystick-Maus tut sie nichts, und ihre Haltedauer lässt sich nicht ändern. ClickLatch und die Drag Lock von macOS behandelt, was die eingebaute Variante kann, wann sie reicht, und was du nimmst, wenn sie nicht reicht.

In welchen Apps funktioniert es nicht?

Apps, die den Tastenzustand direkt auslesen, mit NSEvent.pressedMouseButtons, statt Zieh-Ereignissen zu folgen, bemerken die Sperre nicht. Innerhalb geschützter Eingabekontexte sieht auch kein Event Tap etwas: Passwortfelder und das Anmeldefenster. Und Mission Control, ein Wechsel des Space oder ein Ausflug in die Menüleiste kann eine aktive Sperre fallen lassen.

Schickt es irgendetwas irgendwohin?

Nur eine Anfrage an die Releases-API von GitHub, einmal am Tag, um nach der neuesten Version zu fragen, und nur solange die Aktualisierungsprüfung eingeschaltet ist. Nichts über dich, deine Klicks oder deine Tastatur geht irgendwohin. Schaltest du Escape releases a lock ein, werden Tastendrücke an der App vorbeigeleitet. Sie prüft nichts außer Escape, lässt alles andere unberührt durch und speichert nichts davon.

Warum blockiert macOS den Download?

Weil die App nicht von Apple notarisiert ist. Notarisierung braucht ein kostenpflichtiges Apple-Developer-Konto, und dies ist eine kostenlose App, die keines hat. Der Build ist signiert, mit einem selbst signierten Zertifikat, und genau das lässt die Bedienungshilfen-Berechtigung und die Selbstaktualisierung funktionieren. Das Quarantäne-Merkmal einmal zu löschen, wie oben gezeigt, genügt.

Ich habe einen Intel-Mac.

Der Download ist für Apple Silicon gebaut. Bau ihn auf einem Intel-Mac mit den Schritten oben aus dem Quelltext. Am Code selbst ist nichts architekturgebunden.

Funktioniert es mit einem Trackpad?

Ja. Drück und halte auf dem Trackpad genauso, wie du es mit einer Maustaste tun würdest. Die App arbeitet auf den Ereignissen, die macOS erzeugt, ihr ist also egal, was sie erzeugt hat.

Wie werde ich es wieder los?

Beende es über das Menüleistensymbol und zieh ClickLatch.app in den Papierkorb. Zum vollständigen Aufräumen entferne es unter Systemeinstellungen → Datenschutz und Sicherheit → Bedienungshilfen mit der Taste .

Probier es einen Tag lang.

Lange Markierungen und langes Ziehen sind dann nichts mehr, worauf du dich innerlich einstellst.

Für macOS herunterladen

Version 0.1.0 · Apple Silicon · macOS 14 oder neuer

Feedback

Sag mir, was du denkst

Etwas kaputt, eine Idee oder eine Frage. Es erreicht mich so oder so.