Как я могу управлять терминалом в текущем пространстве с помощью AppleScript?

Работая над созданием обработчика, который передает окно терминала, а затем вызывает идентификатор для сценария, я столкнулся со смешанными результатами, и мне любопытно, есть ли более чистый способ получитьwindow 1

Обработчик:

on termHandler()
    set activeTerminal to ""
    if application "Terminal" is running then
        tell application "Terminal"
            if not (exists window 1) and not busy of window 1 then
                activate
                tell application "Terminal" to do script "echo snow" in window 1
            else
                tell application "Terminal" to do script "date" in window 1
                set activeTerminal to window 1
                return activeTerminal
            end if
            do script "echo foo"
            activate
            set activeTerminal to window 1
            return activeTerminal
        end tell
    else
        tell application "Terminal"
            activate
            do script "echo bar" in window 1
            set activeTerminal to window 1
            return activeTerminal
        end tell
    end if
end termHandler

Все, что я прочитал и исследовал:

Предполагает, что AppleScript и Терминал не ладят. Моя текущая ОС — Sierra, в которой я пишу это, но я запускал Yosemite в других коробках, которые использовали бы этот скрипт. Моя конечная цель здесь - определить окно терминала в этом конкретном пространстве и запустить некоторые из них, do scriptно у меня, похоже, возникла проблема с этим. Есть ли более простой способ определить, работает ли терминал, а не создавать новое окно, и если он работает, вернуть window 1как переменную, чтобы я мог ее передать do script?

Этот комментарий не решает никаких проблем с Spaces , однако вот проблема, которую я вижу сразу. Если Терминал открыт и без , произойдет сбой, и вы не написали обработчик ошибок для этого сценария . Еще одна проблема, которую я вижу, заключается в том, что если Терминал открыт и без файла , он переводит Терминал вперед , но не создает новый файл . Продолжение в следующем комментарии... windowif not (exists window 1) and not busy of window 1 thenwindowactivatewindow
Вы должны либо программно щелкнуть плитку док-станции терминала на док-станции , либо использовать системные события для ⌘N , либо сообщить терминалу , чтобы он существовал в этом сценарии. Просто некоторые моменты для размышления. reopenwindow 1
почему бы не оставить это как ответ? Если есть ошибка, я за лучший подход к конечной цели.
Я не публиковал его как ответ, потому что он не решает проблемы, которые у вас возникают с Spaces.

Ответы (1)

Вам действительно нужно, чтобы он вводился в окно терминала, или это просто способ, которым вы обнаружили, что он работает? Я не уверен, знаете ли вы об этом или нет, но вы можете запускать сценарии оболочки непосредственно из AppleScript с помощью этой команды «сделать сценарий оболочки». В качестве примера:

do shell script "echo snow"