Deklanşör kullanan komut dosyası
Var olduğunu düşünmüyorum, ama her şey gibi yapılabilir.
Aşağıdaki komut dosyasını bir tuş birleşimi altında kullanılabilir hale getirirseniz (aşağıda daha fazla açıklama), ekran görüntünüzün kenar boşluklarını sol, sağ, üst ve altta boşluklarla ayırarak ayarlamanıza izin veren bir pencere açılır :
sonuç:
veya:
sonuç:
vb.
Varsayılanı 30 piksel olarak ayarladım, ancak herhangi bir varsayılan değeri ayarlayabilirsiniz (aşağıya bakın).
Nasıl kullanılır
Komut dosyası Shutter
ve kullanır wmctrl
. Varsayarsak Shutter
, yüklemek (eğer söz beri) sisteminizde zaten edilir wmctrl
:
sudo apt-get install wmctrl
Not Kubuntu kullanıyorsanız , Zenity
varsayılan olarak yüklenmez:
sudo apt-get install zenity
Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın. İsterseniz komut dosyasının satırındaki "varsayılan" kenar boşluğunu değiştirebilirsiniz:
`arg =`
olarak kaydedin custom_screenshot.py
.
Komut dosyasını bir tuş kısayol kombinasyonuna ekleyin: şunu seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
python3 /path/to/custom_screenshot.py
Not
Komut dosyası wmctrl
, pencerenin konumunu belirlemek için kullanır . Ancak farklı pencere yöneticilerinde, wmctrl -lG
komutun çıktısı pencerenin y konumunda küçük farklılıklar gösterir. Bu farklılıklar deviation=
, komut dosyasının-satırında ayarlanan değerle ortadan kaldırılır . O anda ayarlanan değer (0) Unity ve KDE için uygundur.
Komut dosyası da test edilir ve üzerinde iyi çalışır Xfce
ve Gnome
ancak komut dosyasının baş bölümünde açıklandığı gibi değerin değiştirilmesi gerekir.
Senaryo
#!/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])