Я намагався використовувати wmctrl
перемикач команд, але це не спрацювало на моїй настройці Ubuntu. Перемикач увімкнеться, але не вимкнеться. (Я думаю, це може бути тому, що я використовую середовище робочого столу gnome, на якому wmctrl
трохи зламаний AFAIK).
У будь-якому випадку, після численних досліджень та розробок, як записати правильний код у bash, я створив єдину команду, яка використовує wmctrl
команди в межах логічного шару для ефективного перемикання стану "завжди вгорі" на поточному робочому столі GNOME. Я опублікував цю відповідь на Ask Unix / Linux, але подумав, що я також опублікую її тут, якщо у когось є однакові проблеми.
Ось команда:
bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'
Він перевіряє властивість стану активного вікна "_NET_WM_STATE", використовуючи xprops
, і якщо він містить текст "ВІДОМ", це означає, що опція "завжди вгорі" активна. Тоді він просто запускає wmctrl
команду з параметром add
або remove
як годиться.
Розбивка команд (кожна команда вставляється в наступну, замінюючи ■
заповнювач):
Отримати активний ідентифікатор вікна:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
Отримайте стан вікна xprop
за допомогою ідентифікатора:
xprop -id $(■) _NET_WM_STATE
Перевірте, чи містить стан "НАД", вказуючи, що у вікні встановлено значення "завжди вгорі":
[[ $(■) =~ "ABOVE" ]]
Поверніть "видалити", якщо це правда, інакше поверніть "додати":
■ && echo "remove" || echo "add"
запустити wmctrl
команду, використовуючи повернене значення як параметр:
wmctrl -r :ACTIVE: -b $(■),above
Надішліть все це bash
так, щоб ви могли використовувати підстановку команд ${ ... }
, bash булеву оцінку [[ ... ]]
та оператор відповідності регулярних виразів =~
:
bash -c '■'
Зокрема, цей останній крок знадобився мені дуже довго. Поки я не зрозумів, що комбінації клавіатур за замовчуванням не працюють у bash, я не знав, чому команди працюють у консолі, коли я їх тестую, але мовчки не виходить із ладу під час запуску безпосередньо як ярлик клавіатури. Це віками мене підводило до стіни!
Примітка: оскільки вам потрібні лапки навколо команди, яку ви надсилаєте в bash, я повинен був бути обережним при написанні команди, щоб я ніколи не ходив більше ніж на один рівень глибше (використовуючи подвійні лапки). Будь-яке подальше введення рядків у лапки вимагало б багатьох заплутаних зворотних косих ринків, щоб уникнути цитат.