Обновление: этот метод работает в OS X 10.11 и более ранних версиях, по крайней мере, до OS X 10.8 (не проверял его на чем-то более старом, чем OS X 10.8), но больше не работает так, как закодировано в macOS 10.12 из-за значительных изменений в Mission Control, сделанных Apple. .
Чтобы программно добавить рабочий стол в Mission Control, приведенный ниже код можно использовать как сценарий AppleScript или BASH в сочетании со службой Automator, используя запуск AppleScript или запуск сценария оболочки, соответственно, и последовательность клавиш, назначенную службе в Системных настройках на клавиатуре. Ярлыки.
AppleScript-код:
do shell script "open -a 'Mission Control'"
delay 0.5
tell application "System Events" to click (every button whose value of attribute "AXDescription" is "add desktop") of group 1 of process "Dock"
delay 0.5
tell application "System Events" to key code 53
Код BASH-скрипта:
#!/bin/bash
open -a 'Mission Control'
osascript -e 'delay 0.5' \
-e 'tell application "System Events" to click (every button whose value of attribute "AXDescription" is "add desktop") of group 1 of process "Dock"' \
-e 'delay 0.5' \
-e 'tell application "System Events" to key code 53'
Откройте Automator и выберите Сервис .
Установить: служба не получает входных данных ни в одном приложении.
Добавьте действие « Выполнить AppleScript » или « Выполнить сценарий оболочки » .
Добавьте соответствующий код для целевого действия .
Сохраните службу как, например: Добавить новый рабочий стол
Назначьте сочетание клавиш для Службы в Системных настройках .
Примечание. Вам придется назначить последовательность клавиш, которая не используется нигде в Системе или в Finder , если вы выберете любое приложение в Сервисе .
Я тестировал это с помощью: ⌃⌥⌘D (Control-Option-Command-D)
Хорошо, используя запись Automator, я заставил ее работать с исправленной версией AppleScript в другом ответе.
Заменить «группы 1» на «группы 2 группы 1 группы 1»:
on run {input, parameters}
do shell script "open -a 'Mission Control'"
delay 0.5
tell application "System Events" to click (every button whose value of attribute "AXDescription" is "add desktop") of group 2 of group 1 of group 1 of process "Dock"
delay 0.5
tell application "System Events" to key code 53
return input
end run
Да, вроде работает. Проблема заключается в том, что решение user3439894 в конечном итоге выдает ошибку, если активное приложение (Finder, textedit и т. д.) не было добавлено на панель «Безопасность и конфиденциальность».
Чтобы обойти это, нам нужны два рабочих процесса: сервис user3439894 с обновленным списком групп в качестве приложения Automator и второй сервис Automator для его запуска.
Приложение Automator (сохранено в /Applications как «Новый рабочий стол».)
при запуске {ввод, параметры}
сделать сценарий оболочки «открыть -a« Управление полетами »»
задержка 0,5
скажите приложению «Системные события» щелкнуть (каждую кнопку, чье значение атрибута «AXDescription» равно «добавить рабочий стол») группы 2 группы 1 группы 1 процесса «Док»
задержка 0,5
сообщите приложению "Системные события" код ключа 53
возврат ввода
конец пробега
Затем нам просто нужно создать второй рабочий процесс как службу, используя действие «Запустить приложение» и сохранить его как «Новый_рабочий стол».
Последние шаги — добавить «New Desktop.App» в «Системные настройки»> «Безопасность и конфиденциальность»> «Специальные возможности».
Затем добавьте сочетание клавиш в «Системные настройки» > «Клавиатура» > «Ярлыки» > «Службы» > «Общие» для рабочего процесса New_Desktop.workflow.
Qcom
Джонатан Де Вет