2009-08-13 2 views
5

Я запускаю X через медленное сетевое соединение. Как я могу узнать, когда окно стало видимым? Мне нужно подождать, чтобы я мог выполнить другую операцию в видимом окне.X11: ждет, пока не будет видно окно?

xterm -T foo & 
# how to flush the display, or wait until the window is visible? 
# polling the visibility would be acceptable as well 
xmovewindow foo 10 20 

обновление: Благодаря Джим Льюису, здесь есть функция быстрой оболочки, которая делает трюк.

function xwait() { 
    while ! xwininfo -name $1|grep 'Map State: IsViewable';do sleep 1;done 
} 
xterm -T foo & 
xwait foo 
xmovewindow foo 10 20 
+1

IIRC, Solaris имеет команду с таким именем, как «toolwait», который пытается это сделать, более или менее. Тем не менее, ISTR, который он обнаружил, когда дочерний процесс создал окно, а не то, что он обязательно отображался. –

ответ

6

Возможно, вы захотите узнать, когда удаленный X-сервер отобразил главное окно приложения. Команда xwininfo позволит вам запрашивать X-сервер по имени окна - я думаю, что это часть стандартной установки X11. Но вам придется делать опрос самостоятельно, повторяя команду до тех пор, пока свойство «Map State» не вернется «IsViewable»

Джонатан Леффлер также упомянул утилиту Sun's toolwait (документация here). toolwait запускает процесс (в данном случае, вашу команду xterm) и возвращает, когда приложение отображает окно верхнего уровня ... оно делает опрос для вас. В пакете X11/xutils на сайте www.ibiblio.org (here) есть пакет, который претендует на роль клона Linux.

срок действия инструмента до начала OpenWindows - теперь это некоторые старая школа X window programming, man! Я имею передо мной справочную страницу Solaris от 1994 года, в которой говорится: «В будущей версии больше не может поддерживаться среда OpenWindows. Возможно, вы захотите перейти на CDE, общую среду рабочего стола ...»

+0

только то, что мне нужно, спасибо! и OpenWindows, что меня заводит ... :-) –

Смежные вопросы