Фото Алекс Найт на Unsplash
Перед тим як перейти на Windows, я використовував Ubuntu 20.04. Після деякого часу роботи з Ubuntu, я вирішив створити автоматизацію, щоб скористатися гнучкістю середовища робочого столу Linux. Хоча врешті-решт я передумав і вирішив розробляти переважно на Linux через низьку якість драйверів, я продовжував використовувати дистрибутиви Linux ще близько двох років. У будь-якому разі, давайте повернемося до теми автоматизації.
Я почав з базових налаштувань мапінгів клавіш за допомогою вбудованого інструменту для налаштування клавіатури GNOME, але цього було замало. В середовищі Linux мені потрібен був більш розширений інструмент, тому я звернувся до сторонніх інструментів, таких як xmap і xkeymap. Вони корисні, але я знайшов їх трохи складними для функціональності, яку вони надають. В цей період я також використовував Windows на іншому диску для завдань Microsoft і для ігор (dual boot). Під час кодування у Visual Studio, я подумав: «Давайте подивимось, як я можу переналаштувати клавіші на Windows», і саме тоді я відкрив для себе AutoHotkey. Це відкритий код і багатий на функціональність порівняно з інструментами, доступними на Linux. Крім того, він має графічний інтерфейс, шпигун вікон, інструмент для компіляції і багато іншого. З того часу я використовую свої власні AHK скрипти для всіх видів повсякденних завдань.
Я почав більш серйозно інтегрувати AHK у своє повсякденне життя, коли спробував використовувати гарячі клавіші Vim. Спочатку я знайшов Vim надзвичайно ефективним, але після тижня спроб з'явився біль у зап’ясті. Крім того, якщо я звикну до гарячих клавіш Vim, мені доведеться шукати розширення, щоб використовувати Vim щоразу, коли я працюю на іншій платформі. Це змусило мене шукати більш універсальне рішення.
Давайте поглянемо на те, як я створив свою версію гарячих клавіш Vim в AHK. Використання клавіш-стрілок під час кодування або набору тексту з правильною позицією пальців є дуже неефективним. За замовчуванням основні гарячі клавіші Vim виглядають ось так:
- h — перемістити курсор вліво
- j — перемістити курсор вниз
- k — перемістити курсор вгору
- l — перемістити курсор вправо
- gj — перемістити курсор вниз (багаторядковий текст)
- gk — перемістити курсор вгору (багаторядковий текст)
- H — перемістити на верх екрану
- M — перемістити в середину екрану
- L — перемістити в низ екрану
- w — стрибок вперед до початку слова
- W — стрибок вперед до початку слова (слова можуть містити пунктуацію)
- ...
Насамперед, наявність клавіш-стрілок, розташованих в одному ряду на клавіатурі, мені не має сенсу, і це відчувається як витрата років розвинених рефлексів. Звісно, до цього можна звикнути, але зміна таких речей вимагає зміни мислення. Як тільки ви звикаєте до Vim, важко повернутися назад. Перед тим, як поділитися своїми налаштуваннями клавіатури, хочу зазначити, що я використовую турецьку QWERTY розкладку.
Турецька розкладка клавіатури Q
“!” позначає клавішу "Alt". Я змінив свої клавіші на:
!j::Left
!ı::Up
!k::Down
!l::Right
!n::Home
!m::End
Це основні налаштування клавіатури. Тепер давайте подивимося, як я вибираю і маніпулюю текстом. Коли клавіша "Alt" натиснута і утримується, ці скрипти надсилають основні команди натискання клавіші залежно від того, які клавіші натискаються.
“^” позначає клавішу “Ctrl”
#HotIf GetKeyState("Alt")
q & j:: {
Send "{Ctrl down}"
Send "{Shift down}"
Send "{Left down}"
Send "{Left up}"
Send "{Shift up}"
Send "{Ctrl up}"
}
#HotIf GetKeyState("Alt")
q & l:: {
Send "{Ctrl down}"
Send "{Shift down}"
Send "{Right down}"
Send "{Right up}"
Send "{Shift up}"
Send "{Ctrl up}"
}
#HotIf GetKeyState("Alt")
q & ı:: {
Send "{Ctrl down}"
Send "{Shift down}"
Send "{Up down}"
Send "{Up up}"
Send "{Shift up}"
Send "{Ctrl up}"
}
#HotIf GetKeyState("Alt")
q & k:: {
Send "{Ctrl down}"
Send "{Shift down}"
Send "{Down down}"
Send "{Down up}"
Send "{Shift up}"
Send "{Ctrl up}"
}
#HotIf GetKeyState("Alt")
q & n:: {
Send "{Shift down}"
Send "{Home down}"
Send "{Shift up}"
Send "{Home up}"
}
#HotIf GetKeyState("Alt")
q & m:: {
Send "{Shift down}"
Send "{End down}"
Send "{Shift up}"
Send "{End up}"
}
!o::^c
!p::^v
!u::^x
!y::^z
Тепер давайте подивимося на мої власні налаштування для інших програм. Перша — це для того, коли я дивлюсь серіали чи фільми на Prime Video. Я хочу легко змінювати мову субтитрів без переходу через меню мови програвача. Я також хочу запускати і ставити на паузу відео, коли змінюю мову. Отже, коли я натискаю PgUp, AHK відправляє спеціальне поєднання клавіш для Chrome, і мій розширення для Chrome виявляє вибрану мову та клікає її програмно. Тобто, з AHK, розширеннями для Chrome, Selenium та іншими інструментами можна створювати будь-яку автоматизацію, яку ви хочете.
#HotIf WinActive('Prime Video')
Pgup::^+Home
Up::^+End
Down::Space
PgDn::^+Insert
#HotIf
Це моє улюблене. Я використовую PowerToys Runner для запуску програм, відкриття файлів і використання його інших корисних функцій. Він має опцію перемикання між запущеними програмами за допомогою префікса '<', але є одна проблема: PowerToys не може перемикатися між вкладками Chrome; він просто показує останню вкладку з кожного відкритого вікна Chrome. Якщо б PowerToys додав цю функцію, думаю, вони могли б використовувати процеси вкладок, але наразі планів додавати це немає, за їхнім GitHub.
Тож, що ми можемо зробити? Звісно, можна використовувати скрипт AHK. Ідея проста:
- Отримати ідентифікатори вікон Chrome, що працюють.
- Перебирати список.
- Якщо хоча б одне вікно Chrome працює, отримати цю вкладку.
- Якщо ця вкладка не інкогніто, відправити "ctrl + shift + a" для пошуку вкладки.
- Як ми можемо визначити, чи вікно Chrome інкогніто чи ні (в інкогніто не можна шукати вкладки в інших вікнах)?
- Використовувати функцію ImageSearch AHK між позиціями вікна Chrome для знаходження конкретного зображення. (Я шукаю іконку розширення Chrome, яке я не дозволяю запускати в інкогніто).
Якщо я натискаю комбінацію "Alt + ö" в будь-якій програмі, Chrome виходить на передній план і відкриває панель пошуку вкладок, якщо я використовую один монітор. Якщо я використовую кілька моніторів, зазвичай він знаходить вікно Chrome на моєму другому моніторі та відкриває панель пошуку вкладок там.
!ö:: {
if (WinExist("Google Chrome")) {
ids := WinGetList("ahk_exe chrome.exe")
for this_id in ids {
WinActivate this_id
this_class := WinGetClass(this_id)
this_title := WinGetTitle(this_id)
WinGetPos &X, &Y, &W, &H
try
{
isImage := ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight,
"*150 D:\work\personal\documents\config\extension.png"
)
if (isImage) {
Send "{Ctrl down}"
Send "{Shift down}"
Send "{a down}"
Send "{Ctrl up}"
Send "{Shift up}"
Send "{a up}"
break
}
}
catch as exc
MsgBox "Не вдалося виконати пошук через помилку:`n" exc.Message
}
} else {
MsgBox "Chrome не існує!"
}
}
Як бачите, з AHK можна зробити дуже багато. Якщо вам сподобалась ця стаття, не соромтесь поставити лайк і залишити коментар! “💻🤘💻
Перекладено з: How I use Autohotkey to Boost My Productivity, No need for Vim!