Weil ich es hasse, ⌘C nicht zweimal drücken zu können, habe ich die macOS-Zwischenablage auf drei erweitert – DualClip
(github.com/RAKKUNN)Hallo! Ich veröffentliche hier mein Mini-Projekt DualClip, das ich gebaut habe, als ich zum ersten Mal macOS benutzt habe.
So einen Beitrag zu schreiben ist mein erstes Mal, deshalb bin ich etwas nervös. Bitte seid nachsichtig, auch wenn die Formulierungen etwas holprig sind 🙇
Was ist das?
Es ist einfach eine kleine Menüleisten-App, die drei Zwischenablage-„Slots“ bereitstellt.
Slot A → unverändert die Standard-Zwischenablage (⌘C / ⌘V)
Slot B → ⌥⌘C / ⌥⌘V
Slot C → ⌃⌘C / ⌃⌘V
Es ist kein „History“-Ansatz wie bei Paste oder Maccy, sondern ein „Slot“-Ansatz.
Dinge wie häufig verwendete E-Mails oder Variablennamen kann man in B fest ablegen und das normale Kopieren und Einfügen weiter wie gewohnt mit ⌘C/⌘V nutzen.
Warum ich das gebaut habe
Beim Refactoring oder bei Übersetzungsarbeit reicht schon ein zusätzliches ⌘C, und das, was man vorher kopiert hatte, ist einfach weg.
Wenn sich das über einen Tag aufsummiert, ist das überraschend stressig.
Ich habe auch History-Apps ausprobiert, aber für mich hatten sie diese Nachteile.
- Das zusätzliche Tempo aus Popup öffnen und auswählen ist langsam
- Wenn man nicht „das gerade eben“, sondern „das davor“ sucht, muss man am Ende doch mit den Augen danach suchen
- Ich wollte einfach, dass beim Drücken von ⌥⌘V genau das sofort eingefügt wird
Deshalb habe ich statt immer mehr Funktionen anzubauen nur das Ein-Zeilen-Konzept übriggelassen: „Im Slot ablegen und per Shortcut herausholen“.
Der Teil, der beim Entwickeln am meisten Spaß gemacht hat (Atomic Paste)
Das war komplizierter als gedacht, denn unter macOS liest ⌘V immer nur das system pasteboard.
Um also Slot B einzufügen, muss ich die system clipboard kurz überschreiben — und dadurch würde das ursprünglich mit ⌘C Kopierte verloren gehen.
Ich habe lange darüber nachgedacht, wie ich das lösen kann.
Am Ende läuft es in dieser Reihenfolge ab.
- Die aktuelle system clipboard zuerst sichern (Deep Copy aller Typen)
- Mit dem Inhalt von Slot B überschreiben
- ⌘V per
CGEventsimulieren - Nach 150 ms mit dem gesicherten Original wiederherstellen
Dieser Zyklus ist komplett in unter 150 ms abgeschlossen, deshalb merkt die nutzende Person überhaupt nicht, dass „das mit ⌘C Kopierte kurz verschwunden war“.
Ich nenne das für mich selbst „Atomic Paste“ ...(ich war ein bisschen stolz auf den Namen 😅).
Besonders das Timing dafür, das Polling kurz anzuhalten und changeCount zu ignorieren, hat wirklich lange gedauert.
Ich habe mich lange gefragt: „Warum wird Slot A plötzlich zum Inhalt von Slot B ...?“
Noch ein paar kleinere Punkte:
- Unterstützt Text/Bilder/Dateien/RTF komplett (Deep Copy von
NSPasteboardItem) - In Passwortfeldern funktioniert es gar nicht erst (
IsSecureEventInputEnabled-Check) - Beim Beenden wird der Slot-Speicher per Zero-Fill gelöscht (
memset_s) - Alle Shortcuts lassen sich ändern (dank
sindresorhus/KeyboardShortcuts)
Zum Thema Privatsphäre
Da Zwischenablage-Apps mit sensiblen Daten arbeiten, habe ich hier besonders darauf geachtet.
- Es wird nichts auf die Festplatte geschrieben. Alles bleibt nur im RAM.
- Es gibt überhaupt keinen Netzwerk-Code. Kein Update-Check und keine Telemetrie.
- Es ist MIT-Open-Source, ihr könnt also selbst hineinschauen.
Wenn ihr es ausprobieren wollt
Am bequemsten ist wahrscheinlich Homebrew.
brew install RAKKUNN/tap/dualclip
Oder ihr ladet das ZIP aus den GitHub Releases herunter und legt es in /Applications ab.
Es ist ein von Apple notariell beglaubigter Build, daher erscheint beim ersten Start kein Warnfenster.
GitHub: https://github.com/RAKKUNN/DualClip
Voraussetzungen: macOS 13+ (Apple Silicon), Bedienungshilfen-Berechtigung
Es ist meine erste macOS-App, daher gibt es sicher noch viele unausgereifte Stellen.
Für Feedback wie „So wäre es besser“ oder „Hier tritt ein Fehler auf“ wäre ich wirklich sehr dankbar und würde viel daraus lernen.
Hinterlasst gern einen Kommentar!
Ich wünsche euch allen einen schönen Tag!!
4 Kommentare
Auch Ditto, ein Clipboard-Manager für Windows, funktioniert ähnlich wie das, was Sie umgesetzt haben.
Wenn Sie es sich als Referenz ansehen, könnte das hilfreich sein, um eine Richtung für Verbesserungen zu finden~
Danke für die Informationen!🙇🙇
Ich schaue es mir einmal an und ziehe in Betracht, Teile davon selektiv zu übernehmen!
Es wäre wahrscheinlich gut, auch eine Speicherfunktion wie bei Clipy zu integrieren.
Haben Sie eher Bedarf an Verlauf oder Snippets?
Ein Verlauf passt jedoch nicht zur Ausrichtung von DualClip.
Ich bemühe mich, es so leichtgewichtig und komfortabel wie möglich zu machen.
Vielen Dank für das Feedback.