シャッターを使用したスクリプト
私はそれが存在するとは思わないが、何でもそうであるように、それは作ることができる。
以下のスクリプトをキーの組み合わせで使用できるようにすると(さらに下の説明)、ウィンドウがポップアップし、スクリーンショットのマージンを左、右、上、下にスペースで区切って設定できます。
結果:
または:
結果:
等
デフォルトを30 pxに設定しましたが、任意のデフォルト値を設定できます(以下を参照)。
使い方
スクリプトはとを使用Shutter
しwmctrl
ます。Shutter
(既に言及しているので)すでにシステム上にあると仮定して、インストールしwmctrl
ます:
sudo apt-get install wmctrl
あなたが使用している場合はNB Kubuntuのが、Zenity
デフォルトではインストールされません。
sudo apt-get install zenity
以下のスクリプトを空のファイルにコピーします。必要に応じて、スクリプトの行の「デフォルト」マージを変更できます。
`arg =`
として保存しますcustom_screenshot.py
。
スクリプトをキーショートカットの組み合わせに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。
python3 /path/to/custom_screenshot.py
注意
スクリプトはwmctrl
、ウィンドウの位置を決定するために使用します。ただし、異なるウィンドウマネージャーでは、wmctrl -lG
コマンドの出力はウィンドウのy位置にわずかな違いを示します。これらの違いはdeviation=
、スクリプトの-lineで設定された値によって排除されます。現在設定されている値(0)は、UnityおよびKDEに適しています。
スクリプトは、テストされ、上の罰金に動作されるXfce
とGnome
、その値は、スクリプトのheadセクションで説明したように、その後、変更する必要があります。
スクリプト
#!/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])