20c20,73 < Есть верный способ: хочешь узнать как НЕ НАДО что-то делать - посмотри, как сделано в MacOS (воистину худшей из существующих десктопных ОС). Там активное приложение обозначит событие каким-нибудь красным кружочком на своем значке в доке, но поскольку док часто имеет настройку автоскрытия с экрана - значок приложения начнет как припадочный "подпрыгивать" в скрытом доке, показывая тебе макушку. Но этого мало: еще в верхней панели есть некое подобие трея, где значки приложений тоже могут о чем-то сигнализировать, в одном из углов экрана могут появляться всплывающие пузыри с нотификациями (как от приложений, так и системными), плюсом к этому иные приложения имеют обыкновение рисовать тебе внезапно отдельные всплывающие окошки с различной срочной информацией - в том числе модальные, блокирующи \ No newline at end of file --- > Есть верный способ: хочешь узнать как НЕ НАДО что-то делать - посмотри, как сделано в MacOS (воистину худшей из существующих десктопных ОС). Там активное приложение обозначит событие каким-нибудь красным кружочком на своем значке в доке, но поскольку док часто имеет настройку автоскрытия с экрана - значок приложения начнет как припадочный "подпрыгивать" в скрытом доке, показывая тебе макушку. Но этого мало: еще в верхней панели есть некое подобие трея, где значки приложений тоже могут о чем-то сигнализировать, в одном из углов экрана могут появляться всплывающие пузыри с нотификациями (как от приложений, так и системными), плюсом к этому иные приложения имеют обыкновение рисовать тебе внезапно отдельные всплывающие окошки с различной срочной информацией - в том числе модальные, блокирующие работу с прочим интерфейсом приложения, да еще перехватывающими фокус ввода. Фу! Вот описал эту помойку - и аж вкус мерзкий во рту появился... > > Как это сделано в система здорового человека? В X Window System, например, издревле существует такая штука, как Urgency Hint flag - особый атрибут окна приложения, обозначающий как раз, что приложение требует внимания пользователя. В свою очередь менеджер окон/рабочих столов/десктопное окружение имеет соответствующий способ обработки события "окну проставлен urgency hint flag". В моем конкретном случае: оконный менеджер i3 умеет сигнализировать, что конкретная рабочая область (workspace), на которой расположено такое окно, смиренно просит на эту рабочую область обратить свое внимание. В свою очередь, панель (bar), где присутствуют какие-нибудь индикаторы этих самых рабочих областей (в polybar можно настроить индикацию номерами, названиями или иконками) - подсветит эту рабочую область соответствующим цветом. И всё! Не нужно никаких припадочных прыгающих значков, треев и всплывающих, заслоняя нижележащие, нотификашек - я просто знаю, что мне кто-то написал в Telegram (потому что подсвечена рабочая область, где у меня привычно открыто окно Telegram) и когда сочту для себя удобным - переключусь туда посмотреть, написали ли мне что-то умное. > > Все это весьма гладко на бумаге, если бы не одно древнее и раздражавшее меня "но": как-то вот оно не так работало где-то на стыке i3 и polybar. Вот если специально, например, запустить в терминале что-то вроде `sleep 5 && echo -e "\a"`, то оно сработает, соответствующее терминалу рабочее пространство нужным цветом окрасится. А вот если urgency hint стрельнет от, скажем, браузера или того же Telegram - то фигушки. Уж что я только не делал... > > И вот не далее как Сегодня Я Узнал: оказывается, для polybar, помимо штатного модуля xworkspaces, существует давно и из коробки не менее штатный модуль i3, где все эти проблемы благополучно и изкоробочно решены! > => https://github.com/polybar/polybar/wiki/Module:-xworkspaces Вики polybar: описание модуля xworkspaces > => https://github.com/polybar/polybar/wiki/Module:-i3 Вики polybar: описание модуля i3 > > Все, что мне потребовалось, это дописать в `~/.config/polybar/config.ini` вот эти незамысловатые строки: > ```ini > > ... > > modules-left = i3 > > ... > > [module/i3] > type = internal/i3 > > label-mode = %mode% > label-mode-padding = 1 > label-mode-background = ${colors.red} > > # focused = Active workspace on focused monitor > label-focused = %index% > label-focused-background = ${colors.background-alt} > label-focused-padding = 1 > > # unfocused = Inactive workspace on any monitor > label-unfocused = %index% > label-unfocused-padding = 1 > > # visible = Active workspace on unfocused monitor > label-visible = %index% > label-visible-background = ${self.label-focused-background} > label-visible-padding = 1 > > # urgent = Workspace with urgency hint set > label-urgent = %index% > label-urgent-background = ${colors.alert} > label-urgent-padding = 1 > > # Separator in between workspaces > label-separator = | > > ... > > ``` > > И теперь всё работает как и было желанно! >