LINUX.ORG.RU

Реализуемо ли это в i3wm?

 ,


1

6

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

  • Run-or-raise. Если программа запущена, то переключиться на неё, если нет - то запустить. В интернете советуют писать выделенный скрипт на любом угодном языке, и это не кажется таким уж сложным (тем более, что есть готовые варианты), но вдруг есть более «родной» способ?
  • Выполнение той или иной команды при щелчке по чему-нибудь на панели. В Awesome я сделал так, что виджет, показывающий громкость, реагировал у меня и на колёсико мыши, и на ЛКМ/ПКМ. Можно ли такое запилить для элементов, выводимых на i3bar?
  • Выполнение той или иной команды при щелчке по рабочему столу.
  • Контекстные меню (опять же, например, по ПКМ по рабочему столу).

    Заранее спасибо. Ну и если у вас будут какие-нибудь предложения или советы со всякими хитростями i3 - тоже буду очень рад выслушать.

★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Run-or-raise. Если программа запущена, то переключиться на неё, если нет - то запустить. В интернете советуют писать выделенный скрипт на любом угодном языке, и это не кажется таким уж сложным (тем более, что есть готовые варианты), но вдруг есть более «родной» способ?

Родного точно нет, только обертки.

Выполнение той или иной команды при щелчке по чему-нибудь на панели. В Awesome я сделал так, что виджет, показывающий громкость, реагировал у меня и на колёсико мыши, и на ЛКМ/ПКМ. Можно ли такое запилить для элементов, выводимых на i3bar?

Если использовать i3blocks вместо встроенного i3status — то да. Например, регулятор громкости: https://github.com/vivien/i3blocks/blob/master/scripts/volume#L64 , меню на zenity: https://github.com/vivien/i3blocks-contrib/tree/master/shutdown_menu

Контекстные меню (опять же, например, по ПКМ по рабочему столу).

Если на панели — см. выше. Про рабочий стол не скажу.

aidan ★★★★
()

Run-or-raise

У i3 случаем нет опций (командной строки) для работы с окнами (по типу как у bspwm)? Если нет, то тут только скрипты (элементарно делается с тем же wmctrl)

Контекстные меню

xfdesktop

sudopacman ★★★★★
()

Run-or-raise.

focus_on_window_activation?

Выполнение той или иной команды при щелчке по чему-нибудь на панели.

Да, нужно делать скрипт.

Выполнение той или иной команды при щелчке по рабочему столу.

Да, при помощи for_window и bindsym.

Контекстные меню (опять же, например, по ПКМ по рабочему столу).

Да, если использовать какую-нибуть утилиту для создания контекстных меню(хз есть ли такие) совместно с теми же for_window и bindsym.

DeaDDooMER
()

Если программа запущена, то переключиться на неё, если нет - то запустить.

Ух ты. Хочу так в своем dwm. Тогда мне одного dmenu будет достаточно.

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

Выполнение той или иной команды при щелчке по рабочему столу.

Да, при помощи for_window и bindsym.

А покажите пример одновременного использования for_window и bindsym, если не трудно. Я не нашел.

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

Это и так есть, но вот при ПКМ по виджету звука в Awesome у меня открывается pavucontrol, что удобно.

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

Родного точно нет, только обертки.

Пофиг, запилим/скопируем

Если использовать i3blocks вместо встроенного i3status — то да. Например, регулятор громкости: https://github.com/vivien/i3blocks/blob/master/scripts/volume#L64 , меню на zenity: https://github.com/vivien/i3blocks-contrib/tree/master/shutdown_menu

Ухты, здорово. Он даже в репозиториях Debian есть

Если на панели — см. выше. Про рабочий стол не скажу.

На панели - это через i3blocks добавить кнопку, на которую повесить запуск чего угодно, что будет рисовать контекстное меню?

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

У i3 случаем нет опций (командной строки) для работы с окнами (по типу как у bspwm)? Если нет, то тут только скрипты (элементарно делается с тем же wmctrl)

Ну, выполнив «i3 команда» можно отправить команду, которую он обработает, если ты об этом. Однако, может, я сам пока не знаю - можно ли через i3 «найти» окно, соответствующее заданным критериям? В Awesome хорошо получалось http://awesome.naquadah.org/wiki/Run_or_raise/ru

xfdesktop

У него своё и малонастраиваемое.

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

focus_on_window_activation?

Не совсем. Если есть окно (или процесс), соответствующее определённым критериям - то переключиться на него, иначе - запустить программу (выполнить команду)

Присоединяюсь к просьбе примера использования for_window и bindsym

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

На панели - это через i3blocks добавить кнопку, на которую повесить запуск чего угодно, что будет рисовать контекстное меню?

Да. Ещё можно использовать вместе с i3 панель из какого-нибудь DE вместо родной.

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

Мне нравится отображение тегов на i3bar, но, может быть, сделаю себе две панели.

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

малонастраиваемое

Если не ошибаюсь, его можно настроить в menulibre

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

Да, не правильно. Вот так вернее, for_window не нужен.

bindsym --whole-window button2 [class="Firefox"] kill

Правда, мне не удалось достучаться до корневого окна. Скорее всего всё таки надо что-то левое использовать.

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

Я тут немного пошаманил:

#!/bin/sh
count=`pgrep -cxlu $USER $1`
if [ $count -eq 0 ]; then
	$2
else
	i3-msg "$3 focus"
fi

Использую так:

./runorraise.sh surf surf [class="Surf"]
Если в списке процессов пользователя нет процесса с именем, заданным первым аргументом, то выполнить второй аргумент, иначе послать i3 команду дать фокус окну, которое определяется третьим аргументом. Использую отдельный аргумент для указания исполняемой команды, потому что команда может не совпадать с именем процесса.

Потестировал; вроде, работает. Однако, я не уверен, что это - лучший вариант. Например, следовало бы проверять «запущенность» нужной программы не через процессы, а через открытые окна Xorg, но мне не пришёл в голову хороший и изящный способ получить список всех открытых окон с присутствием в выводе параметров типа класса, имени. xwininfo -root -tree выдаёт аццкую простыню. Заодно я не уверен, везде ли, где надо, у меня стоят кавычки, и нет ли где кавычек лишних. Буду очень благодарен всем за советы, предложения, критику, тестирование.

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

Ага). Но имхо, если привязать к хоткеям vol_up, vol_down, mute, то в pavucontrol надо будет лазить не чаще, чем раз в три года. А с такой периодичностью легче pavu в dmenu набрать

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