
Да, у меня ужасный опыт новичка с Apple Script.
Мне нужно открыть новое окно Терминала в текущем пространстве рабочего стола. НЕ перемещайте меня в другое пространство, где запущен Терминал, а затем открывайте другое окно Терминала.
Конечно, если Терминал не запущен, то следует запустить новый процесс Терминала.
решение1
tell application "Terminal"
do script " "
activate
end tell
Это кажется странным, но это использует странность в том, как Терминал обрабатывает входящие команды "do script"; он создает новое окно для каждой из них. Вы можете заменить это на что-то полезное, если хотите; он выполнит все, что вы захотите, сразу после открытия нового окна.
решение2
Если между скриптом do " " нет текста, то в терминале не появится дополнительная командная строка.
tell application "Terminal"
do script ""
activate
end tell
решение3
Я могу придумать три разных способа сделать это (первые два украдены откуда-то еще, но я не помню откуда). Я использую третий, который вызывает скрипт оболочки из applescript, потому что я хочу открывать новое окно каждый раз, и потому что он самый короткий.
В отличие от скрипта, встроенного в OS X, начиная с версии 10.10, все они открывают терминал в каталоге, который является текущим рабочим каталогом в окне Finder (т. е. вам не обязательно выбирать папку, чтобы открыть его).
Также включены несколько функций bash для завершения цикла Finder > Terminal > Finder.
1. Повторно используйте существующую вкладку или создайте новое окно терминала:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if (exists window 1) and not busy of window 1 then
do script "cd " & quoted form of myDir in window 1
else
do script "cd " & quoted form of myDir
end if
activate
end tell
2. Повторно используйте существующую вкладку или создайте новую вкладку терминала:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if not (exists window 1) then reopen
activate
if busy of window 1 then
tell application "System Events" to keystroke "t" using command down
end if
do script "cd " & quoted form of myDir in window 1
end tell
3. Генерировать новое окно каждый раз с помощью скрипта оболочки, вызываемого из AppleScript
tell application "Finder"
set myDir to POSIX path of (insertion location as alias)
do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell
4. (БОНУС) Псевдоним Bash для открытия нового окна поиска для текущего рабочего каталога в вашем терминале
Добавьте этот псевдоним в ваш .bash_profile.
alias f='open -a Finder ./'
5. (БОНУС) Измените каталог в окне терминала на путь к окну Finder.
Добавьте эту функцию в ваш .bash_profile.
cdf() {
target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
if [ "$target" != "" ]; then
cd "$target"; pwd
else
echo 'No Finder window found' >&2
fi
}
решение4
Ответы выше работают только если Терминал уже запущен. В противном случае он открывает два окна Терминала одновременно - одно из-за do script
и одно из-за activate
.
Вы можете предотвратить это с помощью простого if ... else:
if application "Terminal" is running then
tell application "Terminal"
do script ""
activate
end tell
else
tell application "Terminal"
activate
end tell
end if
Бонус:
Если вы хотите напрямую запускать команды, вы можете сделать это с помощью нажатий клавиш (не очень элегантно — я знаю! Но это работает)
[...]
else
tell application "Terminal"
activate
tell application "System Events" to keystroke "ls -la"
tell application "System Events" to key code 36
end tell
end if