ИНТЕРЕСНОЕ
Слой для запуска приложений
как открыть любую программу одним нажатием клавиши
Долго пользовался рабочими столами в винде, очень зашли они, на одном столе открыл рабочий чат, на втором браузер, на третьем IDE и т.д., балдежно быстро переключаешься, не убирая руки с клавиатуры.

В какой-то момент у меня было активно 6 рабочих столов, и чтобы переключиться с 6 на 1 надо жмать хоткей 6 раз... а потом обратно еще 6.. Возникла мысль, может есть какой-то хоткей, чтобы переключиться именно на 6 стол? Но, к сожалению в самой винде такого нет, что странно.

Те самые 6 рабочих столов (ノಠ益ಠ)ノ彡┻━┻

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

В итоге самым лучшим решением, на мой взгляд, является открывать программы сочетаниями клавиш.

Существует несколько способов как это реализовать, мне понравились:

  1. Первую закрепленную на панели задач программу можно открывать нажатием Gui + 1, вторую Gui + 2 и так далее, до 10 программ. Если программа уже запущена, то он развернется, то что надо, но есть ограничение по количеству. Закрепляем нужные программы на панели задач (после назначения важно не менять порядок закрепленных программ), в Vial на нужную клавишу назначаем Gui (kc) с вкладки Quantum и вместо kc выбираем нужную цифру(важно выбирать цифры находящиеся над буквами, не с нумпада!);
  2. Если надо запускать больше 10 программ, то отличным решением будет написать скрипты на AutoHotKey. С помощью AHK можно назначить много различных действий на определенные сочетания клавиш. Примеры скрипта можно найти в разделе AutoHotKey этой статьи. Довольно просто создать хоткей вида Ctrl + Shift + Alt + E, по его нажатию AHK скрипт откроет или же перенесет фокус на заданную программу. В Vial модификатором Ctrl + Shift + Alt является Meh (kc) с вкладки Quantum.

Данные примеры под ОС Windows, под все остальные операционки наверняка есть аналогичные способы запуска приложений по горячим клавишам. Например, для macos есть инструмент Keyboard Maestro, в котором, насколько знаю, можно реализовать идею слоя для запуска программ.


Начало длинного пути


Нашел опенсорсную альтернативу рабочих столов, оконный менеджер komorebi, поковырялся с приложухой несколько дней и не зашло. В ней вроде есть все то, что мне нужно, можно настроить несколько столов, есть хоткеи для переключения на каждый и много всяких других интересностей присущих оконным менеджерам.

Вот такую вот красоту позволяет наводить komorebi

Не зашло т.к. показалось неудобным конфигурирование столов, там мы заполняем json файл, в котором пишем какая приложуха на каком столе стартует, и это не работает, если, например, мне надо 2 отдельных профиля одного браузера открывать на разных столах, ведь .exe файл у них один, стартуют только с аргументами разными, а такого тюнинга в komorebi не оказалось, к сожалению. Да и мне надо всего 6 хоткеев, а оконный менеджер предоставляет тонну функционала, который мне особо и не нужен.
Какие есть варианты решения проблемы?

Как-то раз залипая на ютубе наткнулся на видос с одной интересной раскладкой от Ben Vallack. Особенно мне понравилось услышанное про сочетания с кнопкой MEH(Ctrl + Shift + Alt). Он сидит на макоси, там насколько понял есть программка Keyboard Maestro, в ней можно назначить хоткеи для открытия любого приложения, и не только.

В Keyboard Maestro есть тонна различного рода конфигурирования для сочетаний клавиш

Если так подумать, то не сильно то мне и нужны собственно рабочие столы, такой вариант мне бы тоже отлично подошел, т.к. по сути то я просто держу на 6 разных столах 6 приложений развернутых на весь экран.

Покупать мак для решения такой проблемы было бы немного перебором, да и в винде для меня особых проблем как будто нет, полез гуглить какие есть варианты реализации подобного функционала в винде.

Нагуглились следующие варианты:

1. Самый простой и не требующий никаких танцев с бубнами, как оказалось уже встроен в винду, можно закрепить программу на панели задач внизу и вызывать эти программы сочетаниями Win + 1-0(порядковый номер программы на панели задач);

Спящий котик(и программы, закрепленные у меня на панели задач)

2. Еще можно забацать скрипты с помощью программки AutoHotkey (далее AHK), в целом вариант неплохой, в скриптах можно сделать и разного рода логику вроде того, что если приложение открыто, не запускаем его второй раз, а просто фокусируемся. Способ подразумевает погружение в язык скриптов AHK, вариант неплохой, но решил погуглить еще;

Пример скрипта на AHK

3. В PowerToys есть модуль "Диспетчер клавиатуры", он как раз делает то что требуется, по сочетанию можно открывать приложение, открывать его с какими-то аргументами и прочие интересности, то что как раз мне требовалось, да и пара других модулей PowerToys у меня уже используется.

Окно диспетчера клавиатуры PowerToys

Что по клавиатуре?

В Vial под это дело решил сделать отдельный слой, на который переключаюсь через OSL, он мне тут показался удобнее всего по нескольким причинам:

  1. удобно что не надо зажимать, просто тапнул и уже на слое;
  2. в отличие от TG, OSL активирует слой только на одно нажатие и далее автоматически возвращает тебя на прошлый слой, самое то для моего сценария использования, т.к. случая когда мне надо два раза подряд переключаться между приложениями представить не могу.
Кнопку для активации слоя с приложениями расположил под большим пальцем, ибо переключаюсь между приложениями очень часто.

Долго не мог найти толкового применения для OSL, а тут он вписывается идеально

На сам слой назначил функции LGUI(1) - LGUI(0), чтобы было проще запомнить где какие приложения раскидал хоткеи по клавиатуре таким образом, чтобы создавалась определенная ассоциация в голове - на месте буквы Т - хоткей открытия телеги, на месте буквы W - хоткей открытия рабочего браузера, на месте буквы S - обсидиан, в котором веду заметки(назначил на S, а не на O ибо хотел все расположить под левой рукой, удобно чтоб не убирать правую руку с мышки\трекбола, если когда-нибудь в мои руки попадет HPD с трекболом, и мышка уже будет не так нужна, то вероятно буду использовать и правую половину под приложения).
Опробуем найденные варианты

Начинать решил с того, что потестить проще всего - закрепление на панели задач. Первые впечатления - балдеж, это прям то что и хотел получить в итоге. Из-за того, что расположил кнопки ассоциативно, привык довольно быстро, движений мышкой совершаю намного меньше, ну и проблема, которая возникала с переключением от 1 рабочего стола к 6 больше не появляется.

Подход настолько понравился, что сочетаний клавиш винды от 1 до 0 не хватило, забиндил все самые используемые приложения и чуток нехватило.. Эх

Пошел пробовать второй по доступности для меня вариант - уже установленные PowerToys, диспетчере клавиатуры попробовал переназначить сочетания клавиш.
Есть много кастомизации для сочетаний, в моем случае назначил сочетание CTRL + ALT + SHIFT(тот самый MEH из qmk и vial) + A, выбрал Действие "Запуск программы" и выбрал экзешник нужного мне приложения, виала.

С таким подходом все работало отлично, но не со всеми программами, стим например почему-то не заработал, пока не выбрал для него параметр "Если выполняется" = "Запустить другой". Это видимо особенности конкретных приложений, но стоит их учитывать, и кстати такие штуки не появлялись при запуске приложений с панели задач, так что возможно стоит подобные стиму приложения запускать как раз с таск бара.

Так выглядит слой с наворотами из PowerToys

На данном этапе идея уже реализована и функционирует так, как хотел, но решил опробовать и 3 способ, скрипты с AHK.

AutoHotKey

Тут потребовалось больше предварительных действий, чем в прошлых двух способах, установил с оф сайта программу AutoHotKey Dash, с помощью можно скомпилировать скрипт .ahk в запускаемый файл.

Окошко программы

Скрипты на AHK похоже существуют уже очень долго, по ним много документации и инфы на форумах, недолго поискав, наткнулся на несколько примеров как можно реализовать открытие приложения по сочетанию клавиш.

!+^SC12::  ; E    
{   
    if PID := ProcessExist("Code.exe")
    {
        WinActivate "ahk_pid " PID
    }
    else
    {
        Run "C:\Users\ivans\AppData\Local\Programs\Microsoft VS Code\Code.exe"
    }
    return
}
Вкратце чего тут понаписано:

Строка 8: если вкратце, строка обозначает, что мы делаем сочетание клавиш Ctrl + Alt + Shift + E. "!+^" - это такое обозначение, что кнопка должна быть с нажата с модификаторами Ctrl + Alt + Shift. "SC12" - это скан кода клавиши E(почему не работает если просто написать букву вместо скан кода не разобрался..).

Строка 10: тут мы запрашиваем функцией ProcessExist запущена ли нужная программа, в данном примере Code.exe, если запущена, то мы сохраняем идентификатор процесса в переменную PID, и заходим на строку 12.

Строка 12: так как мы проверили что программа запущена, нам просто надо переключиться на окно этой программы. Мы вызываем функцию WinActivate, и передаем в нее идентификатор найденного процесса, сохраненный в переменную PID.

Если же на строке 10 оказалось, что программа Code.exe не запущена, то мы попадаем в блок else, на строку 16.

Строка 16: мы выяснили, что программа не запущена, нам надо ее запустить. Функцией Run запускаем программу, в кавычках передаем в нее путь к файлу.

Далее компилируем скрипт, запускаем получившийся .exe файл, и, вуаля, при нажатии на сочетание клавиш все магическим образом открывается!

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

В большинстве случаев реализованный функционал не сильно отличается от того, что позволяет сделать PowerToys, однако, существую различные нестандартные случаи, когда PowerToys уже не справляется, например если мы запускаем sample1.exe файл, а он под капотом запускает sample2.exe файл, и уже именно он висит в открытых процессах. В таком случае AHK позволяет сделать кастомную логику: если не открыт sample2.exe, то запусти sample1.exe. Или, например, есть возможность искать запущенные приложения не по названию файла, а по названию окна, это пригодилось чтобы назначить на сочетание клавиш открытие браузерного приложения YouTube.

!+^SC1b::  ; Tab    
{   
    if WinExist("YouTube -.*YouTube")
    {
        WinActivate
    }
    else
    {
        Run "C:\Program Files\BraveSoftware\Brave-Browser\Application\chrome_proxy.exe  --args"
    }
    return
}
Штука классная, позволяет развить идею запуска приложений по сочетанию до максимума. В дальнейшем буду однозначно продолжать ее использовать.
Итоги

На мой взгляд получилось 10 из 10, количество движений, выполняемых мышкой сократилось очень сильно, и переключаюсь между приложениями в мгновение. Теперь действительно готов к HPD с трекболлом, до этого были сомнения т.к. много работаю курсором, но с реализованным слоем для приложений к мышке почти не тянусь. Теперь осталось дождаться собственно самого обновленного HPD.

Еще как вариант можно рассмотреть реализацию такого слоя на макропаде, например, если на основной клавиатуре уже слишком много слоев, некуда впихнуть.

Также стоит отметить, есть буквально одна ситуация, в которой пока не нашел решение через AHK - как открывать два разных профиля одного браузера двумя разными сочетаниями клавиш. У них и процесс крутится как будто один и тот же, и в названии окна нет названия профиля.. Тут буду продолжать использовать открытие через панель задач. А от использования PowerToys скорее всего откажусь в итоге, ибо AHK позволяет сделать те же веще, но с более тонкой настройкой.
P.S.

Если будете пробовать делать скрипты на AHK, настоятельно советую читать документацию, в ней часто можно найти полезные примеры. Мне в ней сложновато было ориентироваться, находить конкретные нужные функции, помогло то, что за метил разделы в левой части экрана. Наиболее полезными для задачи запуска приложений мне показались разделы Process и Window, в них есть функции для поиска запущенной программы по любым параметрам.

https://www.autohotkey.com/docs/v2/lib/ProcessExist.htm

Над статьей работал:

Автор — Иван Селезнёв

Вопросы и обсуждение в нашей группе