Applescript для открытия НОВОГО окна терминала в текущем пространстве

Applescript для открытия НОВОГО окна терминала в текущем пространстве

Да, у меня ужасный опыт новичка с 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

Связанный контент