Skrypt za pomocą migawki
Nie sądzę, że istnieje, ale jak wszystko, można to zrobić.
Jeśli udostępnisz poniższy skrypt pod kombinacją klawiszy (wyjaśnienie poniżej), pojawi się okno, w którym możesz ustawić marginesy zrzutu ekranu po lewej, prawej, górze i dole , oddzielone spacją:
wynik:
lub:
wynik:
itp.
Ustawiam domyślną wartość 30 pikseli, ale możesz ustawić dowolną wartość domyślną (patrz poniżej).
Jak używać
Skrypt używa Shutter
i wmctrl
. Zakładając, że Shutter
jest już w twoim systemie (od kiedy o tym wspomniałeś), zainstaluj wmctrl
:
sudo apt-get install wmctrl
Uwaga: Jeśli używasz Kubuntu , Zenity
domyślnie nie jest instalowany:
sudo apt-get install zenity
Skopiuj poniższy skrypt do pustego pliku. Jeśli chcesz, możesz zmienić „domyślny” margines w wierszu skryptu:
`arg =`
zapisz to jako custom_screenshot.py
.
Dodaj skrypt do kombinacji skrótów klawiszowych: wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:
python3 /path/to/custom_screenshot.py
Uwaga
Skrypt używa wmctrl
do określania pozycji okna. Jednak w różnych menedżerach okien dane wyjściowe wmctrl -lG
polecenia pokazują niewielkie różnice w pozycji y okna. Różnice te są eliminowane przez wartość ustawioną w deviation=
linii skryptu. Aktualnie ustawiona wartość (0) jest odpowiednia dla Unity i KDE.
Skrypt jest także przetestowany i działa poprawnie na Xfce
i Gnome
, ale wartość musi być zmieniona, a następnie, jak wyjaśniono w sekcji head skryptu.
Scenariusz
#!/usr/bin/env python3
import subprocess
import time
"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
pass
else:
time.sleep(0.5)
# frontmost window pos
frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
frontmost = frontmost[:2]+"0"+frontmost[2:]
f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
# extent
xt_data = get("xprop -id "+frontmost).split()
xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
# set data for screenshot command
x = str(int(f_data[0])-int(arg[0])-xt[0])
y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])
command = "shutter -s="+(",").join([x,y,w,h])+" -e"
subprocess.call(["/bin/bash", "-c", command])