Efektywna praca ze schowkiem systemowym to nie tylko umiejętność szybkiego wciskania Ctrl+C i Ctrl+V — przydatna jest też na przykład wiedza, jak korzystać ze schowka w terminalu.
Warto oglądać dobrych programistów przy pracy, pozwala to nauczyć się rzeczy, o których istnieniu po prostu nie wiemy. Ostatnio uderzyło mnie to przy słuchaniu prezentacji twórców Springa — w pewnym momencie Rob Winch potrzebuje zakodować hasło, a potem wkleić je w jedno pole w IDE (patrz 30-sekundowy fragment nagrania). Do tej pory gdy miałem zrobić coś podobnego, uruchamiałem komendę wypisującą coś w terminalu, zaznaczałem tekst myszą i kopiowałem. Upierdliwa rzecz, trzeba oderwać ręce od klawiatury, można kliknąć w złym miejscu, a z dala od biurka, na przykład na chodzącym jak spróchniała deska touchpadzie Lenovo, taka prosta czynność staje się utrapieniem. Natomiast Rob wykonał po prostu w terminalu:
spring encodepassword password | copy
Jak możemy uzyskać coś takiego na naszej maszynie? Sprawa jest nieco skomplikowana, bo nie ma jednej metody dla wszystkich systemów.
Spis treści
xclip dla Linuksa
Instalujemy pakiet xclip:
sudo apt install xclip
Wtedy polecenie xclip
bierze wejście i wkleja do schowka, natomiast xclip -o
wypisuje zawartość schowka. Wtedy powinniśmy móc zrobić coś podobnego jak Rob:
echo -n password | sha512sum | xclip
Odpalamy powyższy kod, przechodzimy do edytora, wciskamy Ctrl+V… i nic. Co się dzieje? Odpowiedź można znaleźć w man xclip. W Linuksie tradycyjnie istnieje więcej niż jeden schowek. Jeśli zaznaczamy coś w terminalu myszą i wciskamy środkowy klawisz myszy, to w terminalu zaznaczony tekst zostanie wklejony za pośrednictwem domyślnego schowka, odseparowanego od schowka, z którego korzystamy klawiszami Ctrl+C i Ctrl+V. Ja postanowiłem zrobić ten drugi ze schowków domyślnym dla xclipa i ustawiłem sobie alias w ~/.zshrc
:
alias xclip='xclip -selection c'
Przypadki użycia
Codzienna praca to nie samo kodowanie haseł, ale obsługa schowka w terminalu ma więcej zastosowań. Często musimy skopiować zawartość pliku. Otwieramy plik w edytorze, czekamy, Ctrl+A, Ctrl+C… Trochę to trwa, okna latają po ekranie, dużo zamieszania. Wystarczy zamiast tego w terminalu odpalić
xclip /mój/plik
Albo mamy coś w schowku i chcemy zapisać to w pliku. Tradycyjnie: edytor, wklejanie, okno dialogowe pytające, gdzie zapisać. W terminalu:
xclip -o > /nowy/plik
Inny przykład: zgłaszanie błędów. Odpalam jakieś polecenie, ono wypisuje komunikat o błędzie:
% git push fatal: unable to access 'https://githu.com/pkubowicz/contract-testing-samples.git/': Failed to connect to githu.com port 443: Connection refused
Wystarczy, że przekieruję wyjście do xclipa i nie muszę nic zaznaczać myszką (ja często z niezgrabności nie „łapię” pierwszego znaku) — mam komunikat w schowku, mogę od razu wkleić go na Slacku i zapytać o pomoc czy też użyć w inny sposób.
git push 2>&1 | xclip
Historia schowka
xclip to nie jedyne narzędzie wspomagające efektywną pracę ze schowkiem. Podstawową rzeczą, bez której nie wyobrażam sobie pracy, jest historia schowka. W IntelliJ jest dostępna pod skrótem Ctrl+Shift+V, ale dla mnie jest niezbędna nie tylko w IDE. Przykładowo, piszę posta na bloga, chcę dodać link, więc kopiuję adres z jednej z zakładek przeglądarki, wracam do tekstu i stwierdzam nagle, że koniecznie muszę zmienić kolejność zdań. Przeklejam fragment tekstu i nie mam już w schowku URL-a — muszę teraz znowu odszukać interesującą mnie zakładkę wśród 20 otwartych i jeszcze raz skopiować jej adres. Tracę czas, a wystarczyło by wyciągnąć 2. element ze schowka.
KDE dostarcza Klipper, który skonfigurowałem tak, żeby skrót Ctrl+Win+V pokazywał listę zawartości schowka, zupełnie jak w IDE.

Strzałkami wybieram aktywną wartość i od tej pory mam ją dostępną pod Ctrl+V.
Inne systemy
Według Google’a użytkownicy Maka mogą skorzystać z komend pbpaste i pbcopy, natomiast na Windows Cygwin dostarcza /dev/clipboard.