Script, usando l'otturatore
Non penso che esista, ma come qualsiasi altra cosa, può essere fatto.
Se rendi lo script di seguito disponibile sotto una combinazione di tasti (spiegazione più avanti), apparirà una finestra che ti permetterà di impostare i margini dello screenshot a sinistra, a destra, in alto e in basso , separati da uno spazio:
risultato:
o:
risultato:
eccetera.
Ho impostato il valore predefinito su 30 px, ma è possibile impostare qualsiasi valore predefinito (vedere di seguito).
Come usare
Lo script usa Shutter
e wmctrl
. Supponendo che Shutter
sia già sul tuo sistema (da quando lo hai menzionato), installa wmctrl
:
sudo apt-get install wmctrl
NB Se usi Kubuntu , Zenity
non è installato di default:
sudo apt-get install zenity
Copia lo script seguente in un file vuoto. Se lo desideri, puoi modificare il "default" marge nella riga dello script:
`arg =`
salvalo come custom_screenshot.py
.
Aggiungi lo script a una combinazione di tasti di scelta rapida: scegli: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:
python3 /path/to/custom_screenshot.py
Nota
Lo script utilizza wmctrl
per determinare la posizione della finestra. Su diversi gestori di finestre, tuttavia, l'output del wmctrl -lG
comando mostra piccole differenze nella posizione y della finestra. Queste differenze sono eliminate dal valore, impostato nella deviation=
riga dello script. Il valore attualmente impostato (0) è appropriato per Unity e KDE.
Lo script è anche testato e funziona bene su Xfce
e Gnome
, ma il valore deve essere cambiato poi, come spiegato nella sezione testa dello script.
Il copione
#!/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])