Откройте новую вкладку терминала с OS X JavaScript для автоматизации

Я играю с JavaScript для автоматизации на OS X Yosemite.

Я пытаюсь открыть новую вкладку в терминальном приложении. Вот что я получил до сих пор:

var Terminal = Application('Terminal);
var Tab = Terminal.Tab;

// Activate the Terminal App, creates a new window if there isn't one already
Terminal.activate();

// This contains all the windows
Terminal.windows;
// This contains the first window
Terminal.windows.at(0) // alternatively, Terminal.windows[0]

// This contains the tabs in the first window
Terminal.windows.at(0).tabs

Terminal.windows.at(0).tabs по существу является массивом. Он имеет .push метод. Я предположил, что я могу использовать следующий оператор, чтобы добавить вкладку в окно:

Terminal.windows.at(0).tabs.push(new Tab());

но это вызывает очень общую ошибку:

Error -10000: AppleEvent handler failed.

Документация сильно отсутствует, и я думаю, что этот инструмент для автоматизации JavaScript был просто gimik, чтобы получить разработчиков JavaScript на борту.

Примечание. Я видел решения AppleScript, которые, по сути, просто сообщают Приложению System Events нажать Command + T, чтобы открыть новую вкладку. Это очень хладнокровно и делает Command + T жестко запрограммированным.

3 ответа

Вы можете эмулировать ярлык для одной новой вкладки. Также нужно объявить целевую вкладку

tell application "System Events" to keystroke "t" using {command down}

Посмотрите пример с двумя или несколькими вкладками

teel application "Terminal"
 do script "cd ~/ && ls" in tab 1 of front window
 tell application "System Events" to keystroke "t" using {command down}
 do script "cd ~/Applications && ls" in tab 2 of front window
end tell


следующий код работает для chrome и safari, но не работает для terminal, я все еще выясняю причину, вижу, помогает ли эта информация.

chrome = Application("Google Chrome")
newTab = chrome.Tab()
chrome.windows[0].tabs.push(newTab)


посмотрите, работает ли следующая работа в вашем случае:

var system = Application('System Events');
var terminal = Application('Terminal');

// tell application "Terminal" to activate
terminal.activate(); 

// tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
system.keystroke('t', {using: 'command down'});

licensed under cc by-sa 3.0 with attribution.