Замерщик

ds-measurer

Версия:1.6.1
Интерфейс:GTK+ 2
Язык:Perl
Зависимости:Perl, GTK2-Perl, Perl YAML, Perl Math::Round
Автор:Дмитрий Соколов
Лицензия:GNU GPL v3
Новая версия 1.6.1 — Changelog
 

По сравнению с предыдущей версией 1.5.1:

  • Вывод дополнительной информации о выделении: соотношение сторон в виде сокращённой и десятичной дробей.
  • Багфикс: с некоторых пор не копировались значения текущего выделения в буфер обмена, поскольку у текущего выделения не было ключа “type”.

По сравнению с предыдущей версией 1.5: Багфиксы, связанные с раздельным адекватным переключением основной и вспомогательных линий основного и замороженных выделений. Теперь у каждого выделения, и основного, и замороженных, свой полностью автономный набор переключаемых вспомогательных линий.

По сравнению с предыдущей версией 1.4.1:

  • Добавлена возможность создавать, менять, удалять и вообще настраивать в конфигурационном файле наборы вспомогательных линий выделения (см. секцию “selection guides”).
  • В конфигурационном файле в связи с этим удалены не нужные более строки “center lines” и “golden sections” (настройки перенесены в секцию “selection guides”). Далее все изменения тоже в конфигурационном файле.
  • Добавлено предустановленное фиксированное соотношение сторон бумажного формата A* (ISO 216): 297/210.
  • Изменения горячих клавиш по умолчанию: “guide horizontal: bracketleft” — [, “guide vertical: bracketright” — ], “only mask: question” — /.

Скрипт предназначен для измерения области экрана — ширины, высоты, координат начальной и конечной точек измерения, угла и длины отрезка между ними. Процесс происходит в графическом режиме: на отдельном прозрачном слое поверх текущей отрисовки экрана выводятся линии курсора и выделения и текущие числовые значения. Требуется включённый композитный режим вывода. В процессе измерения есть возможность делать скриншоты выделенной области в буфер обмена и/или файл на диске, сохранять в буфер обмена текущие числовые значения выделения, переключаться в режим выделения из центра, ограничивать выделение каким-либо из заданных соотношений сторон, включать вспомогательные линии (центровые, золотого сечения, диагональ), менять их цвета и др. Вместе со скриптом идёт поумолчательный конфигурационный файл ds-measurer.yaml в формате YAML, в котором можно настроить цвета отрисовки, сочетания клавиш для разных функций, набор соотношений сторон фиксации выделения, формат и маску файла скриншота и др.

Синтаксис

ds-measurer

Ключей нет

ds-measurer

Запуск скрипта и основы

Скрипт написан на Perl, так что запускается, очевидно, так: $ perl путь_до_скрипта/ds-measurer. Можно и без perl, поскольку файлу скрипта присвоены права на выполнение. Кроме файла, собственно, скрипта к нему есть ещё только один файл настроек.

После запуска на экране появится перекрестие курсора мыши — две перпендикулярные линии в ширину и высоту экрана. Нажав и удерживая левую кнопку мыши, вы можете выделить определённую область экрана. При этом появятся прямоугольник выделения, вспомогательные центральные линии и числа — координаты начальной и текущей точек выделения и его ширина и высота. Во время выделения (и не только) вы можете любоваться им, делать скриншоты выделенной области, копировать все геометрические значения выделения в буфер обмена пробелом, перемещать его правой кнопкой мыши (не отпуская левой), сохранять текущее состояние выделения на экране (и в памяти со всеми его параметрами), включать и выключать вспомогательные линии, отрезок между начальными и текущими координатами и угол между ним и горизонталью, ограничивать выделение каким-нибудь из заданных соотношений сторон, пить кофе, расставлять на экране направляющие, переключаться в режим выделения из центра, менять цвета и чёрт знает, что ещё. Обо всём ниже. После того, как вы отпустите левую кнопку мыши, текущее выделение пропадёт (кроме сохранённых выделений и направляющих).

Выделение из центра и с фиксированным соотношением сторон

Тут всё аналогично соответствующим функциям выделения в распространённых графических редакторах. При нажатии и удержании левой клавиши Shift (по умолчанию; можно поменять в ds-measurer.yaml) начальные координаты выделения являются его центром. Выделение происходит равномерно во все стороны от своего начала.

При нажатии и удержании левой клавиши Ctrl (по умолчанию; можно поменять в ds-measurer.yaml) будет сохраняться текущее выбранное соотношение сторон выделения. Это текущее соотношение сторон можно выбрать из предустановленных как непосредственно перед началом выделения, так и прямо во время выделения, нажав на одну из клавиш q, w, e, r или t. Сами горячие клавиши, как и соответствующие соотношения сторон, можно, опять же, поменять в ds-measurer.yaml.

Как и в случае с выбором соотношения сторон, сами режимы выделения из центра и с фиксированным соотношением сторон можно включать и отключать как до начала выделения, так и непосредственно во время выделения. То есть, вы можете нажимать, удерживать и отпускать Shift и Ctrl что по отдельности, что вместе, когда заблагорассудится. Нажали — выделение поменялось соответственно, отпустили — вернулось к прежнему состоянию.

Перемещение выделения

Текущее выделение можно перемещать, нажав и удерживая правую кнопку мыши. Перемещать выделение можно как прямо в процессе нового выделения — выделяете себе, нажали на правую кнопку мыши (не отпуская левую), перетащили куда-нибудь, отпустили правую кнопку мыши, выделяете дальше — так и выбрав одно из созданных ранее выделений (или направляющих) — выбрали нужное, нажали на правую кнопку мыши, переместили.

Вспомогательные линии и цвета

Как во время выделения, так и до его начала можно включать и отключать вспомогательные линии, а также менять цвета различных элементов выделения. Всё это, функционально, естественно, ни на что не влияет, но позволяет видеть и оценивать, что, как и зачем вы выделяете.

Наборы вспомогательных линий можно задавать в конфигурационном файле. По умолчанию предусмотрены 4 набора. Первый включен по умолчанию — это центральные линии. Просто две дополнительные линии, горизонтальная и вертикальная, по центру выделения. Выключается и включается вновь клавишей x. Второй — линии золотого сечения. То же самое, что и центральные, только делящие выделенную область по горизонтали и вертикали по правилу золотого сечения. Включается и выключается клавишей c. Третий — линии, делящие область выделения на 3 по горизонтали и вертикали, клавиша v. Четвёртый — на 5, клавиша b. Кроме того, клавишей z показываются и скрываются отрезок между начальными и конечными координатами выделения, его длина, а также угол между ним и горизонталью.

Цвета всего, что рисует на экране скрипт, определяются некоторым количеством заданных в конфигурационном файле цветовых схем, переключение между которыми происходит по заданным там же горячим клавишам. По умолчанию предусмотрены три схемы: основная, с которой скрипт работает после запуска, тёмная и светлая. Переключаются они по умолчанию клавишами 12 и 3 соответственно (основного цифрового ряда клавиатуры, а не NumPad’а). Настройка этих схем, создание своих собственных и назначение им соответствующих горячих клавиш подробно описаны в части, посвящённой конфигурационному файлу.

Создание скриншотов и копирование значений выделения в буфер обмена

Вы можете создавать скриншоты выделенных областей, нажав на клавишу s — либо текущей области непосредственно в процессе выделения, либо области, выделенной и сохранённой ранее. Это самая очевидная и удобная функция для простых смертных, а не каких-нибудь странных дизайнероверстальщиков. Если обычно для скриншота части экрана нужно делать скриншот всего, потом открывать любимый толстый растровый редактор, открывать в нём сделанный скриншот, выделять нужное, отрезать всё остальное, сохранять его опять и всё это закрывать, то с этим скриптом гораздо проще запустить его по какому-нибудь сочетанию клавиш, как это делаю, например, я, выделить нужную область, и нажать s и Esc для выхода.

Есть два места …поручик, молчать!…, куда свежесделанный скриншот может попасть: обычный файл с картинкой на диске и буфер обмена. Скрипт позволяет сохранять скриншоты и туда, и сюда (поведение по умолчанию), либо только туда или только сюда. Это, как и пути к файлам скриншотов, их имена и формат, настраивается в конфигурационном файле.

В любой момент вы также можете скопировать в буфер обмена пробелом (или другой клавишей, определённой в конфигурационном файле) все геометрические значения текущего выделения или, если в данный момент вы ничего не выделяете, активного выбранного сохранённого ранее выделения или направляющей. В случае выделения копируются начальные и конечные координаты, ширина, высота, длина отрезка, угол. В случае направляющей — её координаты и угол.

ds-measurer

Сохранение и очистка выделений и направляющих

Обычно вы можете наблюдать все эти линии и циферки, как и делать скриншоты или копировать значения выделения в буфер обмена, только непосредственно во время выделения. Как только вы отпускаете левую кнопку мыши, на экране остаётся только перекрестие курсора. В версии 1.1 ds-measurer’а появилась возможность сохранять выделения. Для этого надо в процессе выделения нажать клавишу f (разумеется, как и другие, клавишу можно поменять в ds-measurer.yaml). В версии 1.2 добавлен функционал направляющих. В любой момент, в процессе выделения или нет, в текущем положении курсора клавишей [ можно добавить горизонтальную направляющую, а клавишей ] — вертикальную.

Направляющие можно скрыть / показать сочетанием клавиш Shift+\. Кроме того, если выделение начинается ближе 10 пикселей к направляющей(-им), оно прилипает к ним (по умолчанию; поведение задаётся в конфигурационном файле, как и расстояние для прилипания, как и сочетания клавиш, связанные с направляющими). По умолчанию отменить прилипание и включить его вновь можно сочетанием клавиш Ctrl+Shift+\. Удалить все направляющие можно сочетанием клавиш Ctrl+Alt+Shift+\.

Всё, что вы таким образом сохранили, остаётся не только на экране, но и в памяти, включая все параметры каждого выделения и каждой направляющей: геометрические значения (начальные и конечные координаты, ширина, высота, длина отрезка, угол для выделений; координаты и угол для направляющих), состояние вспомогательных линий и даже их цвета.

По сути, в скрипте есть четыре основных сущности: сам курсор, новое создаваемое выделение (если вы в процессе оного) и два стэка (что-то вроде стопок прозрачных плёнок) — сохранённых выделений и сохранённых направляющих. В каждый конкретный момент времени вы либо создаёте новое выделение, либо работаете со стэком сохранённых выделений или стэком сохранённых направляющих. Курсор, понятно, есть всегда, и присно, и во веки веков.

Поскольку сохранённые выделения и направляющие находятся в разных стэках, вы тоже в каждый момент времени находитесь в одном из них. Выбрать активный можно клавишей Caps Lock.

Если Caps Lock выключен — вы находитесь в стэке сохранённых выделений и можете выбрать одно из них колесом мыши. При этом текущее выделение становится активным и подсвечивается (чтобы сбросить активность и подсветку, нужно нажать на колесо мыши). Выбрав одно из выделений, вы можете делать с ним всё то же самое, что и с обычным: сделать скриншот выделенной области клавишей s, скопировать геометрические значения в буфер обмена пробелом, переместить, нажав и удерживая правую кнопку мыши, удалить клавишей Delete. Удалить все сохранённые выделения скопом можно клавишей j.

Если Caps Lock включен — вы находитесь в стэке сохранённых направляющих и можете делать с ними всё то же самое, кроме скриншотов, само собой.

Таким образом, у вас есть две стопки — выделений и направляющих — между которыми можно переключаться по Caps Lock, и в каждой из которых может быть выбрано что-то одно, с чем можно что-то сделать. Кстати, вы можете удалять и выделения, и направляющие, независимо от того, что именно это такое, и в каком стэке вы находитесь, просто по принципу добавленного последним, по одному, клавишей Backspace. Очень удобно при случайном нажатии на одну из клавиш f[ или ] (o_O).

ds-measurer

Маскировка

Для лучшего визуального восприятия выделенной области вы можете «затенить» («замаскировать») всю остальную часть экрана, кроме, собственно, этой выделенной области. Это особенно удобно при создании скриншотов — сразу видно конечную картинку; ничто другое не мешает.

Маскировка возможна для каждого конкретного выделения — как для текущего, так и для сохранённых — для каждого своя. Маскировка имеет градации — от полного её отсутствия сквозь разной степени полупрозрачность чёрного до полностью чёрного.

Делается это с помощью нажатой и удерживаемой клавиши Alt и движения мыши вверх / вниз. Например, при текущем выделении у вас нажата левая кнопка мыши. Вы, не отпуская её, нажимаете и удерживаете клавишу Alt и продолжаете двигать мышь вверх / вниз. Когда достигнете желаемой степени затенения, отпускаете Alt. Разумеется, область выделения таким образом станет другой, но ничего страшного, это легко скорректировать; такая вот небольшая плата за удобство (на мой взгляд, предложения принимаются) интерфейса. Всё ещё проще с сохранёнными выделениями. Выбираете нужное выделение, нажимаете и удерживаете клавишу Alt и двигаете мышь вверх / вниз. Разумеется, при этом размеры и позиция выделения не меняются.

Для ещё большей наглядности можно при маскировке отключить все направляющие и числа, чтобы не мешались. Делается это клавишей v (тоже настраивается в ds-measurer.yaml). Нажали — направляющие с числами пропали, нажали ещё раз — появились снова.

Вечная «проблема толщины направляющих»

Допустим, у вас есть на экране красный квадрат размером 100 × 100 пикселей, расположенный на расстоянии 200 пикселей от левого края экрана и 300 пикселей от верхнего края экрана. Но вы хотите убедиться и померить его. Запускаете скрипт, подводите перекрестие курсора к левому верхнему углу квадрата и сталкиваетесь с этой самой проблемой. Как вы понимаете, линии курсора тоже имеют свою толщину (по умолчанию скрипта в 1 пиксель), иначе их просто не было бы видно. Куда подводить курсор, как выделять и, главное, что будут означать те числа, которые покажет вам скрипт?

Тут просто необходимо прийти к какому-то соглашению и иметь его в виду. Есть как минимум три варианта, предусмотренные скриптом, один из которых вы можете выбрать в конфигурационном файле.

  1. Самый очевидный. Сделать все вспомогательные линии толщиной не в 1, а в 2 пикселя. Тогда всё просто и очевидно. Реальные координаты начала и конца выделения будут приходиться прямо на центр курсора и находиться, как и полагается, между реальными пикселями. Но это жутко неудобно и ненаглядно — труднее спозиционировать курсор. Тем не менее, поведение предусмотрено настройкой selection mode со значением two pixels.
  2. При выделении все линии курсора и прямоугольника выделения находятся снаружи выделенной области, то есть, их толщина не входит в значения ширины и высоты реального выделения, (реально выделено только то, что находится полностью внутри прямоугольника выделения и как бы обрамлено его линиями. Такое поведение предусмотрено настройкой selection mode со значением outer. В нашем примере при такой настройке для корректного выделения красного квадрата необходимо подвести курсор к одному из его углов так, чтобы сами линии курсора «прикасались» к этому углу, но ещё не залезали на сам квадрат и после окончания выделения все линии прямоугольника выделения были по краям квадрата, но снаружи, делая его как бы толще.
  3. При выделении все линии курсора и прямоугольника выделения находятся внутри выделенной области, то есть, их толщина входит в значения ширины и высоты реального выделения. Лично мне такое поведение кажется наиболее удобным, так что оно в скрипте выбрано поведением по умолчанию (selection mode со значением inner). В нашем примере при такой настройке для корректного выделения красного квадрата необходимо подвести курсор к одному из его углов так, чтобы сами линии курсора только-только, но уже залезали на квадрат и после окончания выделения все линии прямоугольника выделения были по краям квадрата, но уже внутри него.

При работе в режимах inner или outer в редких случаях вы можете столкнуться с одним нюансом, при котором скрипт ведёт себя логично и предсказуемо, но не вполне очевидно. Приблизьте мысленно перекрестие курсора — это квадрат в один пиксель. Если вы, например, находитесь в режиме inner и выделяете что-то вниз и вправо, то реальное начало координат находится в левом верхнем углу этого пикселя. А если выделяете вверх и влево, то — в нижнем правом. А теперь редкая, но встечающаяся ситуация. Вы выделили что-то вниз и вправо, сохранили выделение, и, не отпуская кнопки мыши, сделали ещё одно с теми же начальными условиями уже вниз и влево, например. При этом, поскольку предполагается, что первоначальное положение курсора — такое же, что и в начале первого сохранённого выделения, но отсчёт координат происходит уже от правого, а не левого края центрального пикселя курсора, эти две реально выделенные области как бы слипаются краями, то есть, на 1 пиксель налезают друг на друга. В случае же режима outer, наоборот, между реальными выделенными областями будет зазор в 1 пиксель.

Предложения

Периодически поступают предложения о новом функционале Замерщика. Кто-то предлагает дополнительно корректировать выделение попиксельно с помощью клавиатуры, кто-то — добавить всплывающую подсказку по горячим клавишам или вообще сделать не только прямоугольное, а, например, ещё и овальное выделение для создания хитрых скриншотов с преферансом и барышнями. Забавно, что подобные предложения поступают от людей, которые сами скриптом не пользуются. Лично мне всё это совершенно не нужно, но если кто-то действительно пользуется Замерщиком и жить не может без этих или каких-то других фич, пишите, реализую, если сочту адекватным.

 

ds-measurer.yaml

Версия:1.6.1
Интерфейс:
Язык:YAML
Зависимости:
Автор:Дмитрий Соколов
Лицензия:GNU GPL v3

Идущий вместе с ds-measurer поумолчательный конфигурационный файл в формате YAML, в котором можно настроить цвета отрисовки, сочетания клавиш для разных функций, набор соотношений сторон фиксации выделения, формат и маску файла скриншота и др.

При своём запуске ds-measurer ищет этот файл сначала в каталоге $HOME/.config текущего пользователя, а уже потом, если не находит, в одном каталоге с собой. При обновлении ds-utils (например, через git pull), в числе прочего обновляется и этот конфигурационный файл в одном каталоге с ds-measurer. Так что, если вы хотите иметь свои собственные настройки Замерщика, необходимо скопировать этот файл в каталог $HOME/.config и менять его уже там.

Секция common: общие настройки

selection mode: inner Соглашение о том, как учитывать при выделении толщину линий самого курсора и прямоугольника выделения (см. подробнее). При значении inner все линии находятся внутри выделения. При значении outer все линии находятся снаружи выделения. При значении two pixels все линии имеют толщину 2 пикселя, что в принципе снимает проблему, но, имхо, неудобно.

Секция guides: настройки направляющих

snap distance: 10 Расстояние в пикселях до направляющей(-их), ближе которого выделение прилипает к ним. При значении 0 прилипание выключено.

Секция screenshot: создание скриншотов

target: both Куда писать скриншоты: только в буфер обмена (clipboard), только на диск (file), или и туда, и туда (both).
format: png Формат скриншота, записываемого на диск. Возможные значения: png, jpeg.
file: ~/screenshot_%Y_%m_%d_%H_%M_%S.png Путь и strftime-маска имён записываемых на диск скриншотов. По умолчанию скриншоты пишутся в домашний каталог $HOME с локальным временем в имени файла.

Секция shortcuts: горячие клавиши

quit: Escape Выход из программы.
fixed ratio: Shift_L При удерживании выделять с текущим из заданых фиксированных соотношений сторон.
from center: Control_L При удерживании выделять из центра.
freeze: f Сохранить в процессе выделения его текущее состояние.
guide horizontal: bracketleft ([) Добавить на месте курсора горизонтальную направляющую.
guide vertical: bracketright (]) Добавить на месте курсора вертикальную направляющую.
snap to guides: backslash (\) Прилипать к направляющим при выделении (Ctrl+Shift+\). Также, скрыть / показать вновь направляющие (Shift+\). Также, удалить все направляющие (Ctrl+Alt+Shift+\).
clear: Delete Удалить с экрана текущее выбранное (подсвеченное) выделение (направляющую).
clear last: BackSpace Удалить с экрана последнее сделанное выделение (или направляющую).
clear all: j Удалить с экрана все сохранённые выделения (или направляющие).
copy values: space (пробел) Копировать геометрические значения выделения или направляющей в буфер обмена.
screenshot: s Сделать скриншот выделенной области (текущего выделения мышью, либо, если нет, активного подсвеченного, сделанного ранее).
segment line: z Показать / скрыть отрезок между началом и концом выделения и угол между этим отрезком и горизонталью.
only mask: question (/, слева от правого шифта) Показать / скрыть все числа и вспомогательные линии выделения при маскировке.

Секция aspect ratio shortcuts: набор фиксированных соотношений сторон выделения и горячие клавиши переключения между ними

Можно добавлять, удалять и менять строки соотношений.

1: q Равные стороны (квадрат).
4/3: w Стандартное соотношение старых мониторов (800 × 600, 1024 × 768, 1280 × 960…).
1/0.618: e Соотношение золотого сечения.
3/2: r Стандартное соотношение фотографий.
16/9: t Стандартное соотношение более современных мониторов (1280 × 720, 1366 × 768, 1920 × 1080…).
297/210: y Соотношение бумажного формата ISO 216 (A4, A3 и т.д.).

Секция selection guides: наборы вспомогательных линий

Можно добавлять, удалять и менять наборы вспомогательных линий. Ключами наборов являются горячие клавиши, по которым данный набор показывается / скрывается. Значениями — объекты: x — массив координат вертикальных линий, y — массив координат горизонтальных линий, show — булево значение: показывать или нет при старте.

x: {x: [0.5], y: [0.5], show: 1} Линии по центру.
c: {x: [0.38197, 0.61803], y: [0.38197, 0.61803], show: 0} Золотое сечение.
v: {x: [0.33333, 0.66667], y: [0.33333, 0.66667], show: 0} Правило третей.
b: {x: [0.2, 0.4, 0.6, 0.8], y: [0.2, 0.4, 0.6, 0.8], show: 0} Правило пятых долей.

Секция colors shortcuts: горячие клавши переключения между заданными цветовыми схемами

Можно добавлять, удалять и менять строки схем, но они должны также присутствовать в секции colors под соответствующими именами.

default: 1 Стандартная полупрозрачная серо-синеватая схема.
dark: 2 Абсолютно чёрная схема.
light: 3 Абсолютно белая схема.

Секция colors: цветовые схемы

В принципе, в конфигурационном файле по умолчанию всё очевидно. Секция colors содержит произвольное количество подсекций цветовых схем. Но чтобы они включались по горячим клавишам, их имена должны в точности совпадать с соответствующими в секции colors shortcuts. Обязательно должны присутствовать схемы default (схема по умолчанию при запуске) и highlight (цвета активного подсвеченного выделения в режиме сохранения выделений; в секции colors shortcuts для неё нет назначенной горячей клавиши, поскольку это бессмысленно, но при желании можете и добавить). Остальные можно добавлять и удалять по желанию. Каждая подсекция цветовой схемы в свою очередь должна содержать следующие подсекции:

main: Цвет отрезка между началом и концом выделения.
basic: Основной цвет: курсора, прямоугольника выделения, вспомогательных линий.
guide: Цвет направляющих.
text main: Цвет текста значений длины отрезка и конечных (текущих) координат.
text basic: Цвет текста значений ширины и высоты выделения и угла между отрезком, соединяющим начало и конец выделения, и горизонталью.
text faded: Цвет текста значения начальных координат выделения.

Эти цвета определяются, в свою очередь, четырьмя значениями RGBA в виде десятичных дробей (от 0 до 1): r (красная составляющая), g (зелёная составляющая), b (синяя составляющая), a (прозрачность цвета).

Значения горячих клавиш представляют собой X11 keysyms (без префикса XK_). Список можно посмотреть у себя в /usr/include/X11/keysymdef.h или, например, здесь. Может быть, позже реализую более дружественный синтаксис.

Не применяйте для отступов табуляции! Формат YAML описывает структуру данных проблами.