Praca ze schowkiem z linii komend

clipboard

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.

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.

Opcje Klippera ze skrótami klawiaturowymi a obok okienko z historią schowka

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.