Niecały tydzień temu pod wpisem "Minimalizm nade wszystko" pojawił się komentarz Blogrysa, w którym ów narzeka na brak opcji powtórzenia zrzutu ekranu tego samego obszaru co ostatnio, bez konieczności ponownego wskazywania czegokolwiek myszą.
Niniejszym pokazuję i omawiam w jaki sposób można osiągnąć pożądany efekt bez opuszczania krainy rozwiązań minimalnych.
Zaczniemy od końca, czyli jak wyglądało moje oryginalne rozwiązanie:
Pod klawisz skrótu podkładamy komendę maim -s -u | xclip -selection clipboard -t image/png, która składa się z dwóch kawałków:
maimto maleńki program (nazwa jest skrótem od angielskiego make image), który potrafi robić zrzuty ekranu w różnych formatach i posługując się różnymi metodami wskazywania, o który kawałek ekranu nam chodzi. W tym przypadku używamy opcji-soznaczającejselectczyli wybór myszą, oraz dodatkowo-udo ukrycia kursora tejże myszy, żeby się nie wtranżalał między wódkę a brzeg pucharu.xclipz kolei zapisuje dane do schowka systemowego (opcja-selection clipboard), dodatkowo wymuszamy formatpng.
Proste? Proste. Intuicyjne? Niekoniecznie. Ale działa.
No i teraz przychodzi taki Borys, cały na biało i mówi, że się nie da powtórzyć screenshota z tego samego obszaru, bezklikowo.
Nie da się: żyć wiecznie, uniknąć płacenia podatków oraz - podobno - założyć hełmu na lewą stronę, choć z tym ostatnim to też kwestia dyskusyjna, bo raz, kwestia twardości głowy, a dwa, jak się kogoś bardzo nie lubi...
O czym to ja. A, właśnie. Powtórka screenshota.
Najpierw trzeba sobie zapisać koordynaty oryginalnego screenshota.
Bo bez kamieni nie ma budulca, bez budulca nie ma pałacu...

Jak? Aplikacja maim nie potrafi zwrócić współrzędnych wybranych przez użytkownika, musimy więc dodać do zestawu trzeci klocek pod tytułem slop - to program, który pozwala zaznaczyć myszą prostokątny obszar, a następnie zwraca współrzędne tego obszaru, w formacie szerokość x wysokość + x + y (tylko bez spacji), o tak:
slop
203x168+1132+700
To znaczy, że użytkownik wybrał myszą obszar o rozmiarze 203 na 168 pikseli, z górnym lewym narożnikiem w punkcie 1132 x 700.
Co nam to daje?
Okazuje się, że maim akceptuje również parametr -g (geometria), o wartości sformatowanej identycznie jak to, co wypluwa slop. Przypadek? Nie wydaje mnie się.
Dalej już prosto. Dwa skrypty: jeden czeka aż użytkownik zaznaczy prostokąt, potem zapisuje współrzędne do lokalnego pliku i robi zrzut ekranu (do schowka). Drugi - czyta współrzędne z tegoż pliku i robi zrzut ekranu (też do schowka). Jeden skrypt nazwałem tinyshot-select, drugi zaś tinyshot-repeat. Zawartość jak następuje:
#!/usr/bin/env bash
set -euo pipefail
### TINYSHOT - SELECT ###
cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}"
geometry_file="$cache_dir/tinyshot-geometry"
mkdir -p "$cache_dir"
geom="$(slop -f '%wx%h+%x+%y')"
printf '%s\n' "$geom" >"$geometry_file"
maim -u -g "$geom" | xclip -selection clipboard -t image/png
#!/usr/bin/env bash
set -euo pipefail
### TINYSHOT - REPEAT ###
cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}"
geometry_file="$cache_dir/tinyshot-geometry"
if [[ ! -s "$geometry_file" ]]; then
printf 'tinyshot-repeat: no saved geometry found at %s\n' "$geometry_file" >&2
exit 1
fi
geom="$(<"$geometry_file")"
maim -u -g "$geom" | xclip -selection clipboard -t image/png
Podpinam jeden skrypt pod jeden skrót klawiszowy, drugi pod drugi - i już. Wszystko za darmo, przy użyciu standardowych linuksowych narzędzi i bez potrzeby robienia doktoratów z ekranozrzucologii stosowanej.
Kolejnym ulepszeniem mogłoby być automagiczne zapisywanie zrzutów do plików (o przyjaznych nazwach typu tinyshot-20260602.131739.319.png) zamiast tylko do schowka. Ale już mi się nie chciało dalej kombinować.
Smacznego!
-- Kuchcik
Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]
Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.