osx: запустить программу при открытии другой программы
Я хотел бы метод запуска программы, когда запускается другая программа. В частности, я хотел бы открыть документ MS Word и одновременно открыть свой менеджер цитирования (EndNote поддерживает эту функцию в настройках MS Word, но я недавно переключил менеджеры цитирования).
Я хотел бы иметь возможность открыть любой существующий документ Word на моем диске и запустить вторую программу. На этот же вопрос недавно был дан ответ для среды Windows 7.
2 ответа
Попробуйте сохранить список свойств как ~/Libary/LaunchAgents/test.plist
и загружая его launchctl load ~/Libary/LaunchAgents/test.plist
,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>test</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>-e</string>
<string>tell application "System Events"
set p to name of processes
if p contains "TextEdit" and p does not contain "Mail"
do shell script "open -gja Mail"
end
end</string>
</array>
<key>StartInterval</key>
<integer>10</integer>
</dict>
</plist>
open -j
( --hide
) был добавлен в 10.8. open -jg
иногда открывает новое видимое окно, если приложение работает, но не имеет открытых окон.
Если StartInterval равен 9 секундам или меньше, программа просто блокируется.
com.apple.launchd.peruser.501[128]: (test) Throttling respawn: Will start in 7 seconds
Спасибо за код. Мне удалось немного его расширить, чтобы также закрыть запущенный процесс, если исходный наблюдаемый процесс больше не работает. Вот мой код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>TextEditWatcher</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>-e</string>
<string>tell application "System Events"
set p to name of processes
if p contains "TextEdit" and p does not contain "Mail" then
do shell script "open -gja Mail"
end if
if p does not contain "TextEdit" and p contains "Mail" then
tell application "Mail" to quit
end if
end tell</string>
</array>
<key>StartInterval</key>
<integer>30</integer>
</dict>
</plist>
В моей Системе (10.9.4) StartInterval, равный 10, был уже слишком большим, и поскольку время не имеет решающего значения в моем случае, я выбрал 30 секунд. Но 15 или 20 тоже должно быть хорошо. Установка и тестирование, как указано в ответе Лри.