スクリプトで、特定のttyデバイスを含むTerminal.appウィンドウを見つけて、そのウィンドウを一番上に上げようとしています。これが私がこれまでにAppleScriptに持っていたものです:
tell application "System Events"
set foundWin to false
if (name of processes) contains "Terminal" then
tell application "Terminal"
set theTabs to first tab of every window where tty is "$(tty)"
repeat with theTab in theTabs
if class of theTab is tab then
set theWin to (first window whose tabs contains theTab)
set selected tab of theWin to theTab
set foundWin to true
end if
end repeat
end tell
end if
if foundWin then
--RAISE THE WINDOW?!
end if
end tell
私が動けなくなるのは、「ウィンドウを上げる」部分です。
これが、私が望んでいることとは異なるものです。
set frontmost of theWin to true
- これにより、ウィンドウはTerminal.appウィンドウのグループの前面に表示されますが、他のウィンドウの上には表示されません。
tell application "Terminal" to activate
- これにより、すべてのターミナルウィンドウが大きなスタックで前面に表示されます。私はただ一つの窓が欲しいのです。
tell application "System Events"
set theSysWin to first window of process "Terminal" whose name is (name of theWin)
perform action "AXRaise" of theSysWin
end tell
これでほとんどできますが、端末ウィンドウをアクティブウィンドウの真下にある#2の位置に上げることです(アクティブアプリがTerminal.app以外のものである場合)。
click theSysWin at {10,50}
- 何もしないようです。
click first static text of theSysWin
- 何もしないようです。
これを行う方法はありますか?それはApplescriptにある必要はありません。
編集私はこのウェブページを見つけました( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ )Obj-C / Cocoa呼び出しを引用する
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
ObjCとCocoaのどちらにも慣れていませんが、これは(最終的には)シェルスクリプトから呼び出されることになるので、そこからどこへ行くのかわからないです。
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
objcもcocoaも、そこからどこへ行くべきかを知るのに十分なほど精通していません。