Как я могу заставить мой Applescript «делать» скрипт в моем окне? - PullRequest
0 голосов
/ 05 сентября 2011

Я работаю над написанием Applescript, который готовит мой терминал для создания дополнений Firefox.

tell application "Terminal"
    do script "cd Public/addon-sdk-1.0"
    do script "source bin/activate"
    do script "clear"
end tell

Когда я запускаю этот скрипт, мой пользовательский терминал открывается вместе с обычным окном терминала; и скрипт bash запускается в обычном окне. Итак, я пытаюсь выяснить, как заставить Applescript открывать только мой пользовательский терминал и выполнять в нем скрипт bash.

1 Ответ

1 голос
/ 05 сентября 2011

Ответом на вашу проблему является не использование do script, а отправка нажатий клавиш в текущее окно терминала с помощью keystroke или key code.Вот скрипт, который я использую, чтобы сделать нечто подобное.Я просто вызываю это из терминала с помощью osascript myscript.scpt или запускаю его напрямую (я использую LaunchBar для вызова applecripts), и он открывает новую вкладку терминала (если терминал уже открыт), дает ему произвольное имяи затем запускает любые команды, которые я кормлю.Вы можете изменить это, чтобы пропустить создание новой вкладки и просто запустить в текущем окне терминала.Я использую этот подход, только когда мне нужно сделать больше, чем просто запустить некоторые стандартные команды терминала (например, отправить ключи в интерактивную сессию Python), в противном случае я просто создаю сценарий bash.

global ENTER_, ESC_
set ENTER_ to 52 
set ESC_ to 53 

on run_commands(commands, pause)
    tell application "System Events"
        repeat with cmd in commands
            keystroke cmd
            key code ENTER_
            delay pause
        end repeat
    end tell
end run_commands

on new_terminal_tab(tab_name)
    activate application "Terminal"
    delay 0.5 
    tell application "System Events"
        # create new tab
        keystroke "t" using {command down}
        delay 0.5 
        # give it a name
        keystroke "I" using {shift down, command down}
        keystroke tab_name 
        delay 0.5
        key code ESC_ # escape 
    end tell
end new_terminal_tab

new_terminal_tab("addon-sdk-work")
run_commands( { "cd /Users/username/Documents/dev/projname",¬ 
        ". env/bin/activate", ¬
        "clear"}, 0.5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...