2016-01-12 3 views
1

У меня есть простой скрипт shell/python, который открывает другие окна. Я хотел бы принести терминал, где сценарий работает на переднем плане, когда скрипт закончил.Как перенести окно процессов на передний план OS X?

Я знаю идентификатор процесса моего родительского окна. Как я могу привести данное окно на передний план? Полагаю, мне нужно узнать имя окна с ПИД-регулятора по пути.

+0

Я не думаю, что ваш процесс без окон имеет какое-либо отношение к главному окну Terminal.app. Возможно, вы могли бы найти способ настроить терминал, независимо от вашей командной строки. –

+0

Я уверен, что в настольном какао есть такой API; просто не помню. –

+1

@NicolasMiari мой процесс без окон - это дочерний процесс приложения Terminal. – mikemaccana

ответ

1

Не уверен, что если есть собственно путь, но это работает для меня:

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.

3

Спасибо Mark за его замечательный ответ! Расширяя что немного:

# 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 секунд терминал, запускающий ваш скрипт, будет отправлен в начало.

+1

Молодцы - и спасибо за то, что поделились своими усилиями с сообществом :-) –

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