Applescript, щоб відкрити НОВЕ вікно терміналу в поточному просторі


14

Так, у мене жахливий досвід новачків із Apple Script.

Мені потрібно відкрити нове вікно терміналу в поточному просторі робочого столу. НЕ переміщуйте мене в інший простір, де працює термінал, а потім відкрийте інше вікно терміналу.

Звичайно, якщо термінал не працює, то він повинен запустити новий термінальний процес.

Відповіді:


18
tell application "Terminal"  
    do script " "  
    activate  
end tell

Це здається дивним, але він користується диваком у тому, як Terminal обробляє вхідні команди "do script"; це створює нове вікно для кожного. Ви насправді можете замінити це чимось корисним, якщо хочете; він виконає все, що завгодно, відразу після відкриття нового вікна.


1
Це працює, але OSX все ще автоматично переміщує пробіли до місця, де були відкриті вікна терміналу. Якщо я відключив цю функцію в системних налаштуваннях, вона виправить її, але тепер усі інші мої додатки більше не переміщують мене в простір з відкритими вікнами для цього додатка. Я ненавиджу запускати додаток лише для того, щоб виявити, що не з’являється вікон, лише рядок меню вгорі показує, що програма фокусується. Так химерно.
Шев

15

Якщо у вас немає будь-якого тексту між "" скриптом "", у терміналі ви не отримаєте додаткового командного рядка.

tell application "Terminal"  
    do script ""  
    activate  
end tell

1
Я думаю, що це нормально, якщо ми залишимо це як відповідь - ви можете запропонувати редагувати відповідь на @ jfm для подальшого вдосконалення та видалення вашої.
slhck

8

Я можу придумати три різні способи зробити це (перші два вкрадені десь з іншого місця, але я забуваю, де). Я використовую третій, який викликає скрипт оболонки з яблучного сценарію, тому що я хочу кожного разу відкривати нове вікно і тому, що це було найкоротшим.

На відміну від скрипту, вбудованого в OS X, щонайменше, 10.10, усі вони відкривають термінал у будь-якому каталозі поточного робочого каталогу у вікні пошуку (тобто вам не потрібно мати вибрану папку для його відкриття).

Також було включено пару функцій 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. Створюйте нове вікно кожен раз за допомогою сценарію оболонки, який викликається з апплета

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. (BONUS) Bash псевдонім, щоб відкрити нове вікно пошуку поточного робочого каталогу у вашому терміналі

Додайте цей псевдонім у свій .bash_profile.

alias f='open -a Finder ./' 

5. (BONUS) Змініть каталог у вікні вашого терміналу на шлях переднього вікна 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
}

0

Наведені вище відповіді спрацьовують лише у тому випадку, якщо термінал вже працює. Інакше він відкриває відразу два вікна терміналу - одне через do scriptта одне через activate.

Ви можете запобігти цьому простим, якщо ... 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.