我有一個簡單的shell/python腳本來打開其他窗口。當腳本完成時,我想將腳本運行的終端放到前臺。如何將進程窗口帶到OS X的前臺?
我知道我的父窗口的進程ID。 如何將特定窗口帶到前臺?我想我必須從PID中找出窗口名稱。
我有一個簡單的shell/python腳本來打開其他窗口。當腳本完成時,我想將腳本運行的終端放到前臺。如何將進程窗口帶到OS X的前臺?
我知道我的父窗口的進程ID。 如何將特定窗口帶到前臺?我想我必須從PID中找出窗口名稱。
不知道是否有一個正確的方式,但是這對我的作品:
osascript<<EOF
tell application "System Events"
set processList to every process whose unix id is 350
repeat with proc in processList
set the frontmost of proc to true
end repeat
end tell
EOF
你可以用osacript -e '...'
也做到這一點。
顯然改變350
你想要的PID。
感謝馬克爲他真棒答案! 擴展上一點點:
# Look up the parent of the given PID.
# From http://stackoverflow.com/questions/3586888/how-do-i-find-the-top-level-parent-pid-of-a-given-process-using-bash
function get-top-parent-pid() {
PID=${1:-$$}
PARENT=$(ps -p $PID -o ppid=)
# /sbin/init always has a PID of 1, so if you reach that, the current PID is
# the top-level parent. Otherwise, keep looking.
if [[ ${PARENT} -eq 1 ]] ; then
echo ${PID}
else
get-top-parent-pid ${PARENT}
fi
}
function bring-window-to-top() {
osascript<<EOF
tell application "System Events"
set processList to every process whose unix id is ${1}
repeat with proc in processList
set the frontmost of proc to true
end repeat
end tell
EOF
}
然後,您可以運行:
bring-window-to-top $(get-top-parent-pid)
使用快速測試:
sleep 5; bring-window-to-top $(get-top-parent-pid)
而且交換到別的東西。 5秒後,運行腳本的終端將被髮送到頂端。
幹得好 - 感謝您與社區分享您的努力:-) –
我不認爲你的窗口較少過程中有什麼做Terminal.app的主窗口。也許你可以找到一種讓終端專注的方式,獨立於你的命令行程序。 –
我確定桌面可可中有這樣一個API;只是不記得它。 –
@NicolasMiari我的無窗口進程是終端應用程序的子進程。 – mikemaccana