Тема: AHK: Управление жестами мыши
Доработка "Lex' Mouse Gestures" отсюда.
В настоящий момент скрипт отрабатывает все виды жестов (движением курсора, жесты с колесиком и последовательным нажатием левой и правой кнопок мыши), а также жесты без нажатия клавиш, что позволяет его использовать и на устройствах без мыши как таковой. Скрипт прост в настройке жестов для различных приложений и их групп; позволяет так же настраивать жесты для сайтов и их горячих клавиш (жесты для почтовых ящиков, социальных сетей и т.д.), при этом незанятые жесты, закрепленные за приложением, останутся рабочими. Жесты могут использоваться для вызова команд меню, заполнения форм, перемещения объектов и некоторых других несвойственных для программ такого рода функций. Можно назначать жесты любого вида в зависимости от четверти или половины экрана, в которой он совершается.
Изменением локальных настроек скрипт может быть "подружен" практически с любым приложением.
Сначала о недостатках оригинального скрипта.
В его конфигурационные файлы вписываются метки вида "Gesture_D_R:", в которых последние буквы означают штрихи соответствующих направлений (L, R, D, U; к ним добавляются DR, DL, UR, UL при включении распознавания "косых" штрихов). К этим меткам переходит скрипт при совершении соответствующих жестов мышью. За ними следуют обычные аутохоткейные манипуляции, причем при большом числе используемых программ это длинные деревья с условными выражениями. Не видно что закреплено за конкретной программой, нет возможности сгрупировать относящиеся к ней настройки в одном месте.
Далее, нет возможности задания глобальных исключений. Например, программы типа FAR или Total Commander с включенным выделением правой кнопкой мыши не проглатывают посаженные на нее жесты. Cкрипт полностью блокирует жесты мыши в браузерах, имеющих их встроенную поддержку, т.е. надо либо выключать скрипт, либо настраивать те же манипуляции в нем.
Что сделано здесь.
1. В области автозапуска конфигурационного файла прописываются группы окон, требующих отдельного задания жестов; программы со сходным управлением попадают в одну группу. Помимо этого, автоматически создается группа Default, включающая все окна. При распознавании жеста скрипт ищет сначала метки, привязанные к группе текущего окна, если она определена, и уже в случае отсутствия их совершает действия, заданные группой Default.
Например, при конфигурационном файле
.............
GroupAdd Text, ahk_exe notepad.exe
return
Text_U_L:
Send ^{vk4F}
return
Default_U_L:
Send !{Up}
return
жест вверх-влево будет посылать клавиши Ctrl+O в блокноте и сочетание Alt+Up во всех прочих случаях.
Если окно состоит в нескольких группах, срабатывает первая, в которой будет найдена соответствующая метка.
2. Для задания глобальных исключений используется группа Exclude; в нее же прописываются браузеры с нативной поддержкой жестов мыши, если они используются. При этом исключения касаются только основной клавиши жестов, так что можно совершать жесты с зажатой не правой кнопкой мыши, а, например, средней или боковой. Более того, можно с одной стороны добавить программу в исключения, а сдругой добавить в группу, метки которой будут исполняться только с дополнительной клавишей.
3. Оригинальный скрипт позволяет использовать сокращенную запись посылаемых жестом клавиш, записывая их в соответствующие переменные в области автозапуска скрипта. То есть необходимость меток сохраняется лишь там, где недостаточно простой посылки клавиш. То же возможно и здесь, только уже с использованием групп. Так вышеописанный пример может быть сокращенно переписан в виде
.............
GroupAdd Text, ahk_exe notepad.exe
Text_U_L=^{vk4F}
Default_U_L=!{Up}
return
Для посылки клавиш командой SendEvent вместо стандартной SendInput следует добавить в начало строки клавиш "@".
Метки имеют приоритет перед одноименными переменными!
4. В скрипт добавлена возможность создавать метки и переменные, привязанные к области выполнения жестов (область определяется началом выполнения жеста). Экран поделен на четыре части с нумерацией от левого верхнего угла.
Соответственно
Default#3_U_L: - метка срабатывающая при выполнении жеста вверх-влево в нижней левой чтасти экрана;
Default#12_U_L: и Default#24_U_L: - метки срабатывающие в верхней и правой половинх экрана.
Допускается не более двух цифр, относящихся к смежным областям и поставленных в порядке возрастания. Использование переменных аналогично вышеописанному. Скрипт сначала ищет метки и переменные с определением области (сначала с одной, а после двумя цифрами) и уже затем переходит к обычным.
5. Как и оригинале, имеется возможность задания жестов с колесиком, только теперь уже применительно к группе окон и региону. Используются переменные и метки вида Default_WheelUp и Default_WheelDown. Для привязки к региону они будут выглядеть как Default#..._WheelUp и Default#..._WheelDown. Удобство этого во многом зависит от качества трещетки мыши.
6. Добавлена возможность задания жестов последовательным нажатием левой и правой кнопок мыши (так называемые "rocker gestures"). Последним соответствуют метки и переменные вида Default_Forward и Default_Back. Их можно настроить для любых приложений с учетом групп окон и места на экране (в последнем случае они имеют вид Default#..._Forward и Default#..._Back). Если ничего не назначено, работоспособность встроенных браузерных жестов такого типа сохраняется в полной мере.
7. Добавлена возможность изменения вводной задержки для групп окон (когда нажимается и не отпускается клавиша жестов, скрипт ждет установленное время начало движения мыши или колеса, в отсутствии котрых посылает нажатие клавиши). В принципе большая задержка добавляет удобства в выполнении жестов, особенно колесных (попробуйте нажать правую кнопку и прокрутить колесико за 200 мс - надо минимум 400-500), но одновременно задержка замедляет действия без отпускания клавиши, вроде перетаскивания или выделения.
Для определения задержки достаточно задать значение в милисекундах переменной с именем группы в области автозапуска конфигурационного файла.
8. Добавлена возможность отображения тултипа с распознанным действием, найденной меткой или переменной (в последнем случае выводятся и посылаемые клавиши) - видно как был интерпретирован жест и что было сделано. Отображается также время между нажатием клавиши и началом жеста и вводная задержка для данной группы окон, что позволяет откорректировать ее значения, а при необходимости и саму технику жестов. С настройками по умолчанию тултип отображается при включенном Scroll Lock, чем и рекомендуется пользоваться на стадии отладки.
9. Добавлена возможность автоматического возвращения курсора в исходную точку жеста. Это позволяет жестами мыши заполнять формы, вызывать пункты контекстного меню ссылок, перемещать объекты и пр.. Сделать это можно либо добавляя точку в начало значения переменных жестов, либо программно через возврат к координатам экрана start_x, start_y, либо прописав такое стандартное поведение в настройках.
10. Улучшена отработка "косых" жестов за счет задания времени остановки цикла распознавания жестов при значительном изменении направления движения мыши. Это уменьшает вероятность появления паразитных штрихов в поворотных точках.
11. Добавлена запретная зона для жестов по краям экрана для предотвращения конфликтов с другими программами (блокировка появления боковых окон и пр.).
12. Упрощена настройка жестов без нажатия клавиш. Пункт меню скрипта "Suspend" теперь останавливает отработку и безклавишных жестов.
13. Оставлен только один конфигурационный файл без файла "настроек по умолчанию" - здесь все наглядно умещается в одном.
В качестве суммы по разрешению трудностей.
1. Если программа активно использует правую кнопку (как Total Commander с выделением правой кнопкой мыши), можно добавить ее в группу Exclude, прописать в настройках дополнительную кнопку (лучше среднюю - боковые поневоле смещают мышь) и пользоваться ей, настроив действия обычным образом.
2. Если есть желание сохранить какие-то уникальные жесты браузера (меню вкладок при жесте колесиком или действие, не имеющее соответствующей горячей клавиши) и повесить свои на правую же кнопку, уменьшайте вводную задержку для данной группы, и тогда после соответствующей паузы будут работать оригинальные жесты. Если это критично, можно пользоваться почти любой программой с минимальной вводной задержкой, приучив себя нажимать клавишу уже при движении мыши.
3. Метки скрипта отрабатываются как подпрограммы внутреннего цикла скрипта; их зависание ведет к временной утрате работоспособности дополнительных кнопок мыши и самих жестов, восстанавливаемой перезапуском скрипта. Поэтому скрипт изначально не рассчитан на то, что в его конфигурационном файле будут прописываться какие-то продолжительные действия. Если это необходимо, запускайте по жесту другой скрипт или передавайте ему действие с помощью горячих клавиш. Следует так же следить за всевозможными ждущими конструкциями (ожидания окон, процессов и пр.) и всегда ставить в них ограничения по времени.
Некоторые рекомендации по настройкам есть в основном файле скрипта.
В конфигурационном файле есть ряд примеров с пояснениями.