Помощью 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