LINUX.ORG.RU

Шорткаты sway для определенного окна.

 , ,


0

1

Можно ли каким-то образом настроить шорткат в sway, чтобы он срабатывал только если есть фокус на определенном окне?

К примеру я нажимаю q, и если фокус не направлен на firefox, то это должно сработать как простое нажатие q, иначе же должна отработать какая-нибудь команда, kill, например.

Я пытался прописать в конфиге что-то подобное:

for_window [class=«Firefox»] bindsym q kill

Но как я понял for_window для этого не предназначен.

Я смотрю, ты в совершенстве умеешь писать без буквы «й».

Можешь вызывать скрипт, который через i3ipc смотрит, кто был в фокусе и дёргает соответствующие последствия.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Можешь вызывать скрипт, который через i3ipc смотрит, кто был в фокусе

Неплохая идея. Только каким образом сделать так, чтобы bindsym не «съедал» хоткей? Через ydotool, как мне кажется, будут задержки. Да и это как-то неправильно: сначала «съедаем» нажатие, а потом его же эмулируем.

Я смотрю, ты в совершенстве умеешь писать без буквы «й».

Не совсем понял к чему это… Если про то, что bindsym не работает в русской раскладке, то можно добавить аргумент –to-code.

AnyWayThanks
() автор топика
Ответ на: комментарий от AnyWayThanks

Только каким образом сделать так, чтобы bindsym не «съедал» хоткей? Через ydotool, как мне кажется, будут задержки. Да и это как-то неправильно: сначала «съедаем» нажатие, а потом его же эмулируем.

Никак, наверное. Можешь все нажатия перехватить уровнем до-sway, я так делаю, задержки минимальны.

Не совсем понял к чему это…

К невозможности набирать тексты потом в файрфоксе если вдруг преуспеешь.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

я так делаю

А можно примерчик? Или хотя бы программы, которые это делают…

К невозможности набирать тексты потом в файрфоксе если вдруг преуспеешь.

Вообще мне это надо, для адаптации вот этого( https://github.com/gillescastel/inkscape-shortcut-manager ) кода. Там все гвоздями прибито к иксам, да и while true меня очень смущает. А с firefox просто пример)

AnyWayThanks
() автор топика

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

bindsym --release q mark _kill
for_window [app_id="firefox" con_mark="_kill"] kill

Поскольку прожатый бинд будет перехватываться sway’ем в любом случае, то --release обязателен, иначе при нажатии q ничего нигде печататься вообще не будет.

anonymous
()
Ответ на: комментарий от anonymous

Жалко, что это работает единожды, могу предположить, что такова специфика for_window, однако за аргумент release спасибо, теперь можно что-то да написать.

AnyWayThanks
() автор топика
Ответ на: комментарий от anonymous

Ну после swaymsg reload окно файрфокс сможет закрытся по нажатию шортката. Однако повторное нажатие такого эффекта не даст. Нужно опять перезагружать swaymsg.

AnyWayThanks
() автор топика
Ответ на: комментарий от AnyWayThanks

С чего бы это вдруг? Метки ты можешь назначать сколько хочешь, и for_window тоже не одноразовый. У меня все работает как ты описал.

anonymous
()
Ответ на: комментарий от anonymous

Хм, а если открыть новое окно firefox, то все работает. Вероятно это потому, что я не закрываю старое окно. Впрочем насколько я понял for_window можно применять только как «свойство» или «действия» для окон, что не совсем мне надо.

Наверное, совмещу проверку через i3ipc и аргумент release.

AnyWayThanks
() автор топика
Ответ на: комментарий от AnyWayThanks

Ничего не понял. Если открыть два окна, и в каждом прожать q, то закрывается только первое? Или что происходит?

anonymous
()
Ответ на: комментарий от AnyWayThanks

Или постой, ты kill заменил на exec с каким-то своим скриптом? Тогда конечно работать не будет, метка остается поскольку окно и не закрывается, потому и for_window срабатывать не будет.

Пока ковырял метки, пришло в голову более простое решение:

bindsym --release q [app_id="firefox" con_id="__focused__"] exec rm -rf / && echo 😂😂😂

Скрипт, понятное дело, заменить на свой.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое! Всё работает так, как надо.

Скрипт, понятное дело, заменить на свой.

Да зачем)

AnyWayThanks
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.