Intereting Posts
Поиск файлов на сервере Unix и сортировка по размеру Как вырезать последние 5 укусов в одном конкретном столбце для всех строк Почему файлы .so исполняемы? Может кто-нибудь объяснить мне, как это делает grep? Грепинг по огромной производительности файла Как обеспечить настраиваемую функцию «полная» для readline of socat Почему мое монтирование привязки видимо за пределами пространства имен mount? Как я могу рассчитывать и форматировать длительность дат, используя инструменты GNU, а не дату результата? Не удается подключиться / найти какие-либо серверы (Ubuntu gamepack) Изменить и сохранить настройки аннотации PDF в Okular? Как просмотреть пакеты с файлами в определенном каталоге? Проблема регулярных выражений в Bash: , похоже, не работает Управление локальным репозиторием пакетов Необходимо написать сценарий «thirsty.sh»: BASH Почему бы не использовать «что»? Что использовать тогда?

Вычисление видимой области частично скрытого окна

Я должен (сценарий) делать скриншоты окон, некоторые из которых могут быть частично или полностью скрыты другими окнами. Конечно, в таком случае скриншот бесполезен, и я предпочел бы напечатать предупреждение.

К сожалению, я не в ситуации, когда я могу использовать Window Manager, который печатает даже скрытые или сведенные к минимуму окна – я застрял со старым KDE.

Я могу использовать, например, xwininfo -id <windowid> | grep "Map State" xwininfo -id <windowid> | grep "Map State" чтобы определить, будет ли окно IsViewable (что в основном означает, что стандартные инструменты скриншотов не будут жаловаться), но я не могу понять, как определить, перекрывается ли окно другими окнами и насколько это ( то я мог бы напечатать предупреждение, если, скажем, видно менее 50% окна).

(Поскольку я на самом деле пытаюсь обходить это, потому что я не верю, что он существует, конечно, я не буду жаловаться, если кто-нибудь указывает мне на простой метод, например, на «перекраивать» окна так, чтобы скриншот был достоин …)

Насколько я знаю (но я не эксперт по X), видимость отслеживается только через события VisibilityNotify , это не состояние, которое вы можете запросить как IsViewable . Вам нужно будет заставить KDE выплюнуть его, я не знаю, может ли он это сделать.

Возможно, вы решите свою проблему, отправив в окно событие VisibilityNotify(state=VisibilityUnobscured) . Я не знаю, достаточно ли этого, вам также может понадобиться отправить событие MapNotify . Вот несколько непроверенных кода Python для отправки события VisibilityNotify .

 #! /usr/bin/env python import re, sys, time import Xlib.X, Xlib.XK, Xlib.display, Xlib.protocol def parse_action(string): state = { '0': 0, '1': 1, '2': 2, 'unobscured': 0, 'partiallyobscured': 1, 'fullyobscured': 2, 'visibilityunobscured': 0, 'visibilitypartiallyobscured': 1, 'visibilityfullyobscured': 2, }[string.lower()] return state def parse_window(display, arg): wid = int(arg, 0) return display.create_resource_object('window', wid) def send_event(display, window, state): window.send_event(Xlib.protocol.event.VisibilityNotify(window=window, state=state)) display.sync() if __name__ == "__main__": display = Xlib.display.Display() send_event(display, parse_window(display, sys.argv[1]), parse_action(sys.argv[2]))