Комбинация xlsw
и xdotool
делает свое дело.
xlsw
список окон по их названию и типу, xdotool
выполняет над ними действия. В принципе, xdotool
может также искать имена окон, но он пропустил всплывающие окна.
В bash
:
xlsw | grep 'Firefox/Popup' | awk '{print $1}' | \
while read _windowID; do xdotool windowclose "${_windowID}"; done
Объяснение:
xlsw
выводит список идентификаторов окон вместе с дополнительной информацией. Вывод выглядит так:
[...]
0x04800001 u-- Pale moon/pale moon Pale Moon
0x04800092 uio NA Pale Moon
0x04800093 u-o Pale moon/palemoon Pale Moon
0x04800099 u-o Pale moon/palemoon Pale Moon
0x04828D21 u-o Pale moon/Popup Pale Moon
0x0489C5D6 u-o Pale moon/Popup Pale Moon
0x03600001 ui- NA NA
0x04604E77 --o Claws-mail/claws-mail claws-mail
0x04604EAC --o Claws-mail/claws-mail claws-mail
0x04604F22 --o Claws-mail/claws-mail claws-mail
0x05C00001 uio NA NA
0x05E00001 u-- NA NA
0x05200007 ui- NA NA
0x05E00002 u-- Wine/explorer.exe
[...]
Затем, с помощью команды grep
, будут выбраны всплывающие окна firefox
(в приведенном выше примере они уже исчезли). awk
печатает первую запись, которая является идентификатором окна, а затем xdotool windowclose
закроет окна (что-то вроде нажатия кнопки закрытия), не убивая управляющее приложение. (xdotool windowkill
убьет приложение.)
xdotool
также имеет встроенную функцию поиска: xdotool search 'firefox' windowclose
также закроет все окна с 'firefox' в их заголовке, но я не смог заставить его работать, чтобы отличить 'Popup'.