Script, menggunakan Shutter
Saya tidak berpikir itu ada, tapi seperti apa pun, itu bisa dibuat.
Jika Anda membuat skrip di bawah ini tersedia di bawah kombinasi tombol (penjelasan lebih lanjut di bawah), sebuah jendela akan muncul, memungkinkan Anda untuk mengatur margin tangkapan layar Anda di sebelah kiri, kanan, atas dan bawah , dipisahkan oleh spasi:
hasil:
atau:
hasil:
dll.
Saya menetapkan default ke 30 px, tetapi Anda dapat mengatur nilai default apa pun (lihat di bawah).
Cara Penggunaan
Script menggunakan Shutter
dan wmctrl
. Dengan asumsi Shutter
sudah ada di sistem Anda (sejak Anda menyebutkannya), instal wmctrl
:
sudo apt-get install wmctrl
NB Jika Anda menggunakan Kubuntu , Zenity
tidak diinstal secara default:
sudo apt-get install zenity
Salin skrip di bawah ini ke file kosong. Jika mau, Anda dapat mengubah "default 'marge di baris skrip:
`arg =`
simpan sebagai custom_screenshot.py
.
Tambahkan skrip ke kombinasi tombol pintas: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:
python3 /path/to/custom_screenshot.py
Catatan
Script digunakan wmctrl
untuk menentukan posisi jendela. Namun pada window manager yang berbeda, output dari wmctrl -lG
perintah menunjukkan perbedaan kecil pada posisi y dari window. Perbedaan-perbedaan ini dihilangkan dengan nilai, diatur dalam deviation=
-line script. Nilai yang ditetapkan saat ini (0) sesuai untuk Unity dan KDE.
Skrip juga diuji, dan berfungsi dengan baik pada Xfce
dan Gnome
, tetapi nilainya perlu diubah kemudian, seperti yang dijelaskan di bagian kepala skrip.
Naskah
#!/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])