Я хотел бы знать (программно), какое окно имеет текущий фокус. Существует ли независимый от оконного менеджера способ обнаружения этого?
В противном случае, как определить, какое окно имеет фокус в Compiz или Metacity?
Еще одна вещь, которую вы можете использовать: xdotool:
xdotool getwindowfocus
вернет идентификатор окна сфокусированного окна и:
xdotool getwindowfocus getwindowname
скажет вам свое имя.
Если вы довольны небольшим программированием на X11, то вам нужна спецификация EWMH , в частности _NET_ACTIVE_WINDOW .
попробуйте использовать библиотеку wnck, а затем используйте этот код:
import wnck
import gtk
while True:
if __name__ == '__main__':
screen = wnck.screen_get_default()
screen.force_update()
while True:
while gtk.events_pending():
gtk.main_iteration()
#time.sleep(0.5)
print screen.get_active_window().get_name()
То, что вы хотите, это libwnck (если вы просто заинтересованы в окнах) или libbamf (если вы заинтересованы в окнах и приложениях, которым они принадлежат). ]
Из информации xtool:
getactivewindow
Output the current active window. This command is often more
reliable than getwindowfocus. The result is saved to the window
stack. See "WINDOW STACK" for more details.
Это то, что я использую для получения названия. (Я на 10.04)
xwininfo -id "$(xdotool getactivewindow)" |sed -n \
"2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
Хорошо, если вы можете пинговать что-то обратно в оболочку:
xdpyinfo | grep focus
Должно работать.
Редактировать: Для более чистого вывода попробуйте следующее:
xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2