Я хотел бы знать (программно), какое окно имеет текущий фокус. Есть ли независимый способ окна-менеджера обнаружить это?
В противном случае, как определить, какое окно имеет фокус в Compiz или Metacity?
Что вы хотите - это libwnck (если вас просто интересуют окна) или libbamf (если вас интересуют окна и приложения, которые им принадлежат).
Вы хотите libwnck (если вас просто интересуют окна) или libbamf (если вас интересуют окна и приложения, которые им принадлежат).
Если вы счастливы сделать небольшое программирование X11, тогда спецификация EWMH - это то, что вы после - именно _NET_ACTIVE_WINDOW.
попробуйте использовать wnck lib, а затем используйте этот код:
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()
Хорошо, если вы можете что-то переписать в оболочку:
xdpyinfo | grep focus
Должно работать.
Изменить: для получения более чистого результата попробуйте следующее:
xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2
Еще одна вещь, которую вы можете использовать, - это xdotool:
xdotool getwindowfocus
вернет идентификатор окна сфокусированного окна и:
xdotool getwindowfocus getwindowname
сообщит вам свое имя.
Из информации 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.
Это то, что я использую для получения заголовка. (I a 10.04)
xwininfo -id "$(xdotool getactivewindow)" |sed -n \
"2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
попробуйте использовать wnck lib, а затем используйте этот код:
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()
Хорошо, если вы можете что-то переписать в оболочку:
xdpyinfo | grep focus
Должно работать.
Редактировать: для получения более чистого вывода попробуйте следующее:
xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2
Если вы счастливы сделать небольшое программирование X11, то EWMH spec - это то, что вы после этого - в частности _NET_ACTIVE_WINDOW .
Из информации 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.
Это то, что я использую для получения заголовка. (I a 10.04)
xwininfo -id "$(xdotool getactivewindow)" |sed -n \
"2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
попробуйте использовать wnck lib, а затем используйте этот код:
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()
попробуйте использовать wnck lib, а затем используйте этот код:
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()
попробуйте использовать wnck lib, а затем используйте этот код:
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()
Еще одна вещь, которую вы можете использовать: xdotool:
xdotool getwindowfocus
вернет идентификатор окна фокусного окна и:
xdotool getwindowfocus getwindowname
сообщит вам свое имя.