Скрипт с использованием Shutter
Я не думаю, что это существует, но, как и все, это может быть сделано.
Если вы сделаете сценарий ниже доступным под комбинацией клавиш (пояснение ниже), появится окно, позволяющее установить поля вашего скриншота слева, справа, сверху и снизу , разделенные пробелом:
результат:
или:
результат:
и т.п.
Я установил значение по умолчанию 30 пикселей, но вы можете установить любое значение по умолчанию (см. Ниже).
Как пользоваться
Скрипт использует Shutter
и wmctrl
. Предполагая, Shutter
что уже есть в вашей системе (поскольку вы упомянули об этом), установите wmctrl
:
sudo apt-get install wmctrl
NB. Если вы используете Kubuntu , Zenity
по умолчанию не устанавливается:
sudo apt-get install zenity
Скопируйте приведенный ниже скрипт в пустой файл. Если вы хотите, вы можете изменить поле «default» в строке скрипта:
`arg =`
сохранить как custom_screenshot.py
.
Добавьте сценарий к комбинации клавиш: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские сочетания клавиш». Нажмите «+» и добавьте команду:
python3 /path/to/custom_screenshot.py
Заметка
Скрипт использует wmctrl
для определения положения окна. Однако в разных оконных менеджерах выходные данные wmctrl -lG
команды показывают небольшие различия в y-позиции окна. Эти различия устраняются значением, установленным в deviation=
-лине скрипта. Текущее установленное значение (0) подходит для Unity и KDE.
Сценарий также протестирован, и он отлично работает на Xfce
и Gnome
, но затем значение необходимо изменить, как описано в разделе заголовка сценария.
Сценарий
#!/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])