- Automatyczne kopiowanie zaznaczonego tekstu do schowka (Windows i Linux)
- Do czego służy autocopy?
- Jak to działa – mechanizm wewnętrzny
- Wersja Windows
- Wersja Linux (X11)
- Wymagania
- Wersja Windows
- Wersja Linux (X11)
- Instalacja i uruchomienie
- Windows – kompilacja
- Linux – kompilacja
- Opcje wiersza poleceń – szczegółowy opis
- Tryby wyświetlania
- Wyzwalanie kliknięciem
- Klawisze modyfikujące
- Konfiguracja czasowa
- Zarządzanie buforem (TUI)
- Logowanie i pliki
- Pomoc i informacje
- Sterowanie w trybie TUI
- Przykłady użycia
- Windows
- Linux
- Różnice między wersją Windows a Linux
- Bezpieczeństwo
- Podsumowanie
Automatyczne kopiowanie zaznaczonego tekstu do schowka (Windows i Linux)
autocopy to lekki program napisany w ANSI C, który automatyzuje kopiowanie zaznaczonego myszą tekstu do schowka systemowego. Dostępny jest w dwóch wersjach – dla systemu Windows (z wykorzystaniem Win32 API) oraz dla Linuxa z serwerem X11. Program eliminuje potrzebę ręcznego naciskania Ctrl+C – sam wykrywa moment zakończenia zaznaczania tekstu i symuluje kopiowanie.
GitHub: github.com/IgorBrzezek/autocopy
Do czego służy autocopy?
autocopy rozwiązuje problem mechanicznego, powtarzalnego kopiowania tekstu. Każdy, kto pracuje z dużą ilością danych, cytatów, kodu źródłowego czy dokumentacji, wie, ile czasu zajmuje ciągłe zaznaczanie i naciskanie Ctrl+C. autocopy robi to automatycznie:
- Praca z dokumentacją – zaznaczasz fragment tekstu, a on już jest w schowku.
- Kopiowanie kodu – przeglądasz kod źródłowy, zaznaczasz fragment i od razu możesz go wkleić.
- Analiza danych – zbierasz informacje z roznych źródeł bez odrywania rąk od myszy.
- Edukacja i badania – gromadzisz cytaty i fragmenty bez zbędnych kliknięć.
Jak to działa – mechanizm wewnętrzny
Wersja Windows
Program instaluje w systemie niskopoziomowy hak myszy (WH_MOUSE_LL), który monitoruje zdarzenia zwolnienia przycisku myszy (WM_LBUTTONUP) w całym systemie:
- Wykrywanie: monitoruje zwolnienie lewego przycisku myszy we wszystkich oknach.
- Walidacja: sprawdza, czy aktywne okno NIE należy do samego autocopy (zabezpieczenie).
- Wykonanie: po 200 ms opóźnienia (na przetworzenie przez system) symuluje naciśnięcie Ctrl+C.
- Odczyt schowka: jeśli włączono tryb TUI, logowanie lub wyświetlanie tekstu, program odczytuje zawartość schowka.
Dodatkowo instalowany jest hak klawiatury (WH_KEYBOARD_LL) do obsługi Ctrl+Z (wyjście), strzałek (nawigacja w TUI) oraz Ctrl+Enter (kopiowanie zaznaczonej pozycji w TUI).
Kontrola instancji odbywa się przez nazwany mutex o nazwie AutoCopy2_Instance_Mutex_Igor, co zapobiega uruchomieniu wielu kopii programu (flaga --force to omija).
Wersja Linux (X11)
Wersja linuksowa wykorzystuje rozszerzenie XRecord do monitorowania zdarzeń myszy i klawiatury w całym systemie X11:
- Rejestracja: tworzy kontekst XRecord do przechwytywania zdarzeń przycisków myszy i klawiszy modyfikujących od wszystkich klientów X.
- Wykrywanie kliknięć: monitoruje ButtonRelease dla przycisku 1 (lewy).
- Walidacja modyfikatorów: sprawdza stan klawiszy Alt i Ctrl przez XQueryPointer.
- Wykonanie: po 200 ms opóźnienia symuluje Ctrl+C przez XTest (XTestFakeKeyEvent).
- Odczyt schowka: pobiera tekst przez mechanizm X Selection (CLIPBOARD).
Wersja Linux posiada rownież wątek obsługi schowka, który pozwala na kopiowanie tekstu z powrotem do schowka systemowego (funkcja w trybie TUI).
Wymagania
Wersja Windows
- System operacyjny: Windows XP SP3 i nowsze z obsługą Win32 API.
- Architektura: x86 lub x64.
- Kompilacja: MinGW-w64 (GCC dla Windows).
- Zero zależności runtime – binarka zawiera wszystkie wymagane biblioteki przy kompilacji z flagą
-static.
Wersja Linux (X11)
- System operacyjny: dowolna dystrybucja Linux z serwerem X11.
- Kompilacja: GCC z bibliotekami X11, XTest, XFixes, XRecord, pthread.
- Debug: libxcb, libXau, libXdmcp (dla linkowania statycznego).
Instalacja i uruchomienie
Windows – kompilacja
Pobierz kod źródłowy i skompiluj kompilatorem MinGW-w64:
gcc autocopy.c -o autocopy.exe -lkernel32 -luser32 -lgdi32 -Wall -O2 -static
Do automatycznej kompilacji można użyć Makefile:
make
Po kompilacji umieść plik autocopy.exe w dowolnym folderze (opcjonalnie dodaj do zmiennej PATH). Uruchom:
Linux – kompilacja
Zainstaluj wymagane pakiety deweloperskie:
Debian/Ubuntu:
sudo apt-get install build-essential libx11-dev libxtst-dev libxfixes-dev libxrecord-dev libxcb-dev libxau-dev libxdmcp-dev
Fedora/RHEL:
sudo dnf install gcc make libX11-devel libXtst-devel libXfixes-devel libXrandr-devel libXext-devel libxcb-devel libXau-devel libXdmcp-devel
Skompiluj z linkowaniem dynamicznym:
gcc autocopy_linux.c -o autocopy_linux -lX11 -lXtst -lXfixes -lpthread
Lub statycznym (większy plik, ale działa bez bibliotek deweloperskich):
gcc -static autocopy_linux.c -o autocopy_linux -Wl,--start-group -lX11 -lXtst -lXfixes -lXext -lxcb -lXau -lXdmcp -lpthread -ldl -lrt -lresolv -Wl,--end-group
Uruchom:
Opcje wiersza poleceń – szczegółowy opis
Tryby wyświetlania
--tui |
Włącza Terminal User Interface – tryb wizualny z logiem, statystykami na żywo i możliwością przewijania. |
--showtext |
Wyświetla skopiowany tekst w konsoli (domyślnie wyłączone). |
Wyzwalanie kliknięciem
--1click |
Wyzwala po pojedynczym kliknięciu (domyślne). |
--2click |
Wyzwala po podwojnym kliknięciu. |
--3click |
Wyzwala po potrojmym kliknięciu. |
Klawisze modyfikujące
--alt |
Kopiuje tylko przy wciśniętym lewym Alt. |
--ctrl |
Kopiuje tylko przy wciśniętym lewym Ctrl. |
--ctrl1 |
Zawsze zezwala na kopiowanie pojedynczym kliknięciem + Ctrl. |
--ctrl2 |
Zawsze zezwala na kopiowanie podwojnym kliknięciem + Ctrl. |
Konfiguracja czasowa
--mintime <ms> |
Minimalny czas między kliknięciami (domyślnie: 0 ms). |
--maxtime <ms> |
Maksymalny czas między kliknięciami (domyślnie: czas podwojnego kliknięcia systemu, ok. 500 ms). |
Zarządzanie buforem (TUI)
--maxline <N> |
Maksymalna liczba linii w buforze TUI (Windows, domyślnie: 100, zakres: 10-100000). |
--maxlinebuffer <M> |
Maksymalna liczba bajtów na linię (Windows, domyślnie: 65536 = 64 KB, zakres: 256-1048576). |
--logbuffer N |
Maksymalna liczba linii w buforze TUI (Linux, domyślnie: 200). |
--linesize M |
Maksymalny rozmiar tekstu w znakach na linię logu (Linux, domyślnie: 4096). |
Logowanie i pliki
--log <plik> |
Zapisuje skopiowany tekst do pliku z znacznikami czasowymi. |
Pomoc i informacje
-h |
Krotka pomoc. |
--help |
Szczegołowa dokumentacja. |
--version |
Wyświetla wersję programu. |
--force |
Wymusza uruchomienie kolejnej instancji (Windows, pomija blokadę mutex). |
-b, --batch |
Tryb batch – bez wyświetlania na konsoli (Linux, do pracy w tle). |
Sterowanie w trybie TUI
| Strzałka w górę | Przesuwa zaznaczenie w górę w logu. |
| Strzałka w dół | Przesuwa zaznaczenie w dół w logu. |
| Ctrl+Enter | Kopiuje zaznaczoną pozycję z logu do schowka. |
| u / U | Przewijanie o stronę w górę (Linux). |
| d / D | Przewijanie o stronę w dół (Linux). |
| Ctrl+Z | Wyjście z programu (Windows). |
| Ctrl+C | Wyjście z programu (Linux). |
Przykłady użycia
Windows
1. Podstawowe użycie z wyświetlaniem tekstu
autocopy.exe --showtext
Wyzwala po pojedynczym kliknięciu i wyświetla skopiowany tekst w konsoli.
2. Podwojne kliknięcie z Alt
autocopy.exe --2click --alt
Kopiuje tylko po podwojnym kliknięciu z wciśniętym lewym Alt.
3. Tryb TUI z logowaniem do pliku
autocopy.exe --tui --log clipboard.txt
Włącza interfejs TUI z statystykami i zapisuje kopiowany tekst do pliku clipboard.txt z oznaczeniami czasowymi.
4. Najbardziej przydatna opcja
autocopy.exe --2click --tui --showtext
Łączy tryb podwojnego kliknięcia z interfejsem TUI i wyświetlaniem tekstu. Zalecane przez autora jako najbardziej uniwersalne ustawienie.
5. Potrojne kliknięcie z konfiguracją czasową
autocopy.exe --3click --mintime 200 --maxtime 800 --showtext
Wymaga potrojnego kliknięcia w oknie 200-800 ms między kliknięciami; wyświetla tekst.
6. Ctrl + kliknięcie z własnym buforem
autocopy.exe --ctrl1 --ctrl2 --maxline 200 --maxlinebuffer 131072 --tui
Zezwala na Ctrl+pojedyncze i Ctrl+podwojne kliknięcie z większym buforem i trybem TUI.
Linux
1. Uruchomienie domyślne
./autocopy_linux
Kopiuje po pojedynczym kliknięciu, wyświetla tekst w konsoli.
2. Podwojne kliknięcie z Alt
./autocopy_linux --2click --alt
3. Tryb TUI z logowaniem do pliku
./autocopy_linux --tui --log ~/autocopy_log.txt
4. Tryb batch (praca w tle)
./autocopy_linux -b
5. Pojedyncze kliknięcie z Ctrl
./autocopy_linux --ctrl1
Jest to rownoznaczne z --ctrl --1click.
Różnice między wersją Windows a Linux
| Cecha | Windows | Linux |
| Środowisko | Win32 API, MinGW | X11, XRecord, XTest |
| Rozmiar pliku | ~100-200 KB (static) | ~38 KB (dynamic) / ~2,7 MB (static) |
| Kontrola instancji | Mutex systemowy | Brak (jedna instancja przez PID) |
| Wyjście z programu | Ctrl+Z lub zamknięcie okna | Ctrl+C w terminalu |
| Nawigacja w TUI | Strzałki gora/dół | Strzałki gora/dół, u/d (strona), Home/End |
| Ograniczenie bufora TUI | –maxline, –maxlinebuffer | –logbuffer, –linesize |
| Ctrl+Shift+Enter w TUI | Brak | Kopiuje wszystkie wpisy z sesji |
Bezpieczeństwo
Program posiada kilka wbudowanych zabezpieczeń:
- Samo-detekcja: nie wyzwala się po kliknięciu we własnym oknie konsoli.
- Pojedyncza instancja: tylko jedna kopia programu może działać jednocześnie (z możliwością wymuszenia flagą
--force). - Obsługa sygnałów: w Windows zapobiega przypadkowemu zamknięciu przez Ctrl+C.
- Walidacja PID: przed wysłaniem Ctrl+C sprawdzany jest właściciel aktywnego okna.
- Wyjście awaryjne: Ctrl+Z (Windows) lub Ctrl+C (Linux) zamyka program.
Podsumowanie
autocopy to eleganckie, minimalistyczne narzędzie dla każdego, kto regularnie pracuje z kopiowaniem tekstu w systemie Windows lub Linux. Dzięki zastosowaniu niskopoziomowych haków systemowych (WH_MOUSE_LL w Windows) i rozszerzenia XRecord (w Linux) program jest niezwykle oszczędny – czeka w tle, nie zużywając praktycznie zasobów procesora.
Bogaty zestaw opcji (tryb kliknięcia, klawisze modyfikujące, konfiguracja czasowa, tryb TUI z logowaniem) sprawia, że sprawdzi się zarowno w codziennej pracy biurowej, jak i w zaawansowanych procesach analizy danych czy dokumentacji. Wersja ANSI C dodatkowo oferuje całkowitą niezależność – pojedynczy plik wykonywalny, który działa bez żadnych zewnętrznych zależności.
Źrodla: github.com/IgorBrzezek/autocopy
