Помощью AppleScript, чтобы открыть окно терминала

У меня есть два окна/вкладки, настроенные для работы в терминале.app, " Сид " и "мел". т. е. в оболочке / новом окне перечислены" syd "и" mel". Как открыть эти конфигурации терминалов с помощью AppleScript?

2 ответов


несколько недель назад я перенес новую машину Snow Leopard (10.6) из машины Tiger (10.4). Тигра терминал сохраненные настройки в ".термин " файлы (обычно в ~/Library/Application Support/Terminal/, но они могут быть сохранены / перемещены в любом месте); Snow Leopard's терминал централизовал свои настройки в свой файл предпочтений.

до миграции в Snow Leopard часть одного из моих обычных рабочих процессов использовала Finder чтобы дважды щелкнуть по сохраненному ".термин " файл в откройте терминал окно с заданным размером и начальные команды. Сегодня я заметил, что каждый раз, когда я это делал терминал создать дубликат "настройки". Итак, я начал искать способ начать сохраненную настройку, которая не включала открытие".термин "файл" (чтобы дубликаты настроек не накапливались); AppleScript был моей первой остановкой, так как у меня был немного опыта с ним раньше.

короче говоря, кажется, нет прямого способа начать новое окно / вкладка с определенным "набором настроек" через терминалкоманды AppleScript. Обычный подход состоял бы в том, чтобы сделать что-то вовлекающее make new window (или make new tab), но я не мог найти вариант, который терминал согласится. Я придумал три альтернативных решения (последнее, на мой взгляд, лучшее).

создайте окно, затем измените настройки

если ваши настройки не включают начальную команду или другой размер от вашего настройки по умолчанию (например, только цвет/клавиатура/поведенческие настройки отличаются от настроек по умолчанию), вы можете использовать терминал ' s do script команда (без параметра "текст"), чтобы создать новое новое окно, а затем изменить его settings set к тому, кого вы хотели.

tell application "Terminal"
    set newTab to do script -- create a new window with no initial command
    set current settings of newTab to settings set "Grass"
end tell

терминал ' s default settings

затем я посмотрел на default settings свойство. Я думал, что можно будет временно изменить настройку по умолчанию, создать новое окно, а затем сбросить настройку по умолчанию. Этот подход в конечном итоге был успешным, но он оказался довольно уродливым (помимо уродства временного изменения по умолчанию).

я Системные Событияkeystroke команда для отправки ⌘N в терминал для создания нового окна. Оказывается, что терминал иногда немного медленно создавать новое окно, и мой скрипт в конечном итоге сбросит значение по умолчанию до терминал была возможность использовать временное значение, которое было организовано предыдущей частью скрипта. do script было бы синхронно, но это также аннулировало бы любую начальную команду, сохраненную как часть настроек. В конце концов я стал считать количество окон перед ⌘N и ждать, пока количество окон увеличится. Если запущенная команда приводит к очень быстрому открытию и закрытие окна, есть шанс, что эта петля может застрять. Я мог бы ограничить итерации, но к этому моменту я был очень разочарован общим вкусом кода (хотя я пошел вперед и расширил его, чтобы разрешить новые вкладки вместо просто окон).

to newTerminal(settingSetName, asTab)
    tell application "Terminal"
        if asTab is true then
            set countRef to a reference to tabs of first window
            set newKey to "t"
        else
            set countRef to a reference to windows
            set newKey to "n"
        end if
        set originalDefault to name of default settings
        set default settings to settings set settingSetName
    end tell
    try
        set initialCount to count of countRef
        tell application "System Events"
            -- keystrokes always go to the frontmost application
            set frontmost of application process "Terminal" to true
            keystroke newKey using command down
        end tell
        repeat until (count of countRef) > initialCount
            beep
            delay 0.1
        end repeat

        tell application "Terminal" to set default settings to settings set originalDefault
    on error m number n
        try
            tell application "Terminal" to set default settings to settings set originalDefault
        end try
        error m number n
    end try
end newTerminal

newTerminal("Grass", false)

выберите пункт меню Системные События

С Системные События, есть способ, чтобы активировать пункты меню Shell>новый Tab и Shell>Новое Окно. Это требует, чтобы" доступ для вспомогательных устройств " был включен (в нижней части панели предпочтений универсального доступа; я обычно включаю его, потому что сценарии GUI, которые затем могут быть выполнены через Системные События часто является единственным (хорошим)способом выполнения некоторых задач автоматизации). Хотя предыдущий вариант также использует Системные События, его очень ограниченное использование не требует " доступа для вспомогательное устройство."

(* makeNewTerminal(settingsSetName, asTab)

    Bring Terminal.app to the front and
        click the menu item named <settingsSetName>.
        If <asTab> is true, then use the menu item under Shell > New Tab,
            otherwise use the menu item under Shell > New Window
*)
to makeNewTerminal(settingsSetName, asTab)
    tell application "Terminal" to launch
    if asTab is true then
        set submenuName to "New Tab"
    else
        set submenuName to "New Window"
    end if
    tell application "System Events"
        set terminal to application process "Terminal"
        set frontmost of terminal to true
        click menu item settingsSetName of ¬
            first menu of menu item submenuName of ¬
            first menu of menu bar item "Shell" of ¬
            first menu bar of terminal
    end tell
end makeNewTerminal

makeNewTerminal("Grass", true)

этот подход буквально автоматизирует выбор и активацию одного из пунктов меню из Shell. Он требует "доступа для вспомогательных устройств", но код намного проще и имеет меньше проблемных областей (основная проблема с этим кодом-локализация).


должно быть что-то вроде этого:

tell application "Finder"
   open file "MyDisk:Users:myhome:Library:Application Support:Terminal:myconfig.terminal"
end tell