Как изменить ярлыки управления полетом из командной строки?

11

Я пытался понять это в течение длительного времени. У меня довольно типичный скрипт для Mac OS:

https://gist.github.com/ryanpcmcquen/b2e608311f286a4ab3e1

Я хотел бы изменить ярлыки управления миссией на Ctrl+ Alt+ ...вместо Ctrl+ .... Например, по умолчанию: Ctrl+ Upдля активации управления полетом. Я хотел бы изменить это на Ctrl+ Alt+ Up, потому что текущий ярлык конфликтует с другими программами, которые я использую.

Обратите внимание, что я уже знаю, как это сделать System Preferences > Keyboard > Shortcuts, я ищу решение для командной строки, которое можно использовать в сценариях.

РЕДАКТИРОВАТЬ: Благодаря @ user3439894 я прошел и сделал скрипт, чтобы изменить все списки ключей на то, что я хочу, чтобы они были. Единственная проблема, это не работает. :-(

Вот что у меня так далеко:

#!/bin/bash
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 32 "{enabled = 1; value = { parameters = (65535, 126, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 33 "{enabled = 1; value = { parameters = (65535, 125, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 34 "{enabled = 1; value = { parameters = (65535, 126, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 35 "{enabled = 1; value = { parameters = (65535, 125, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 79 "{enabled = 1; value = { parameters = (65535, 123, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 80 "{enabled = 1; value = { parameters = (65535, 123, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 81 "{enabled = 1; value = { parameters = (65535, 124, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 82 "{enabled = 1; value = { parameters = (65535, 124, 3014656); type = standard; }; }"
chown -Rf `whoami` ~/Library/Preferences/com.apple.symbolichotkeys.plist;
defaults read com.apple.symbolichotkeys
ryanpcmcquen
источник
Вы когда-нибудь находили решение для этого?
Натан
@ Натан, нет. Сейчас я просто по умолчанию.
ryanpcmcquen
У меня была похожая проблема. Может быть, вы можете попробовать мое решение: apple.stackexchange.com/questions/344494/…
Натан
@ Натан, похоже, твое решение требует ручного вмешательства. Я только что узнал, как изменить другие программы, которые я использую, чтобы иметь разные горячие клавиши. Hammerspoon FTW.
ryanpcmcquen
Эта часть команды type = standard;должна на самом деле type = 'standard';отметить кавычки 'standard'. Тем не менее, иногда даже при правильно сформированной командной строке изменение просто не вступает в силу, даже с ; killall -u $USER cfprefsdдобавлением в конец defaults команды . Кроме того, полный путь к .plistфайлу в этом случае использования не требуется, а просто, например, defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys ...и остальная часть команды - это все, что необходимо.
user3439894

Ответы:

5

Это не прямой ответ, хотя я надеюсь, что приведенная здесь информация поможет вам получить прямой ответ.

Я могу рассказать, какие изменения в каком файле происходит при изменении сочетания клавиш по умолчанию для управления полетом с Control-Up Arrow на Control-Option-Up Arrow. Это «номер элемента 2» массива «параметров» в словаре «значения» словаря «32» и словаря «34» словаря «AppleSymbolicHotKeys» в /Users/$USER/Library/Preferences/com.apple.symbolichotkeys.plistфайле.

Вот defaults readпредставление com.apple.symbolichotkeys.plistструктуры файла, поскольку оно относится к изменениям, сделанным при определенных выше обстоятельствах.

Управление полетом со стандартной стрелкой Control-Up

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2359296
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2490368
                );
                type = standard;
            };
        };
    };
}

Управление полетом изменено на Control-Option-Up Arrow

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2883584
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    3014656
                );
                type = standard;
            };
        };
    };
}

В разделе ошибок на defaultsстранице руководства написано:

Значения по умолчанию могут быть структурированы очень сложными способами, что затрудняет пользователю ввод их с помощью этой команды.

И это прекрасный пример, поскольку это будет очень сложная командная строка, используемая defaultsдля записи целевых значений в целевые элементы массива, если это даже выполнимо. Просто к сведению ... Если вы собираетесь попытаться выполнить defaults write com.apple.symbolichotkeys ...команду, сначала убедитесь, что вы создали резервную копию целевого файла.

Другой вариант - использовать AppleScript для изменения настроек с помощью навигации по системным настройкам, что также будет немного сложнее по сравнению с установкой объекта верхнего уровня, который здесь не является целью. Я даже не уверен, что это выполнимо, однако, если бы мне нужен был автоматизированный способ, я бы понял это, однако у меня нет времени, чтобы выяснить какой-либо метод, извините.

По крайней мере, теперь вы знаете, что изменится, где и откуда вы сможете выяснить это самостоятельно или получить дополнительную помощь, узнав об этом немного больше.

Вот подрезанное изображение в Xcode com.apple.symbolichotkeys.plistфайла.

введите описание изображения здесь

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

user3439894
источник
Кажется, он изменяет правильные файлы plist, единственная проблема заключается в том, что ярлыки фактически не меняются, не после перезагрузок, повторного чтения файла или чего-либо еще.
ryanpcmcquen
Как называется эта «сторонняя утилита, которая регистрирует изменения файловой системы и затем преобразует эту информацию в более читабельный вывод»?
Аллен Барги
1
@Allen Bargi, IIRC Вероятно, filemonэто была часть Дополнений из книги «Внутренние компоненты Mac OS X - в ядро ​​Apple» в форме исходного кода, filemon.c который я скомпилировал в исполняемый файл моей системы. Затем я сравнил различия в текущем состоянии измененного файла с файлом из резервной копии Time Machine, сделанной непосредственно перед изменениями. Вы также можете использовать встроенную команду fs_usage .
user3439894
@ryanpcmcquen ваша ссылка не работает
charlesreid1
@ charlesreid1, ну, это не сработало.
ryanpcmcquen
1

Это моя рекомендация: используйте такую ​​утилиту, как Karabiner, чтобы выполнить такую ​​настройку.

Как разработчик, я хочу сказать, что лично я нахожу это увлекательной и мучительной проблемой, и она действительно демонстрирует уродливую, темную сторону macOS, скрывающуюся за кулисами, которую по-настоящему могут оценить только разработчики программного обеспечения и хакеры ...

Проблема достаточно проста: я просто хочу переназначить комбинацию клавиш по умолчанию на мою собственную привязку.

С какой стати это так сложно / сложно? Я намерен выяснить и опубликовать решение ... Оставайтесь с нами.

Стив Беннер
источник
Спасибо, я с нетерпением жду встречи с тем, что вы узнаете. Но загрузка внешней программы занимает столько же времени, сколько и установка их через стандартные интерфейсы Mac, я все еще надеюсь на встроенное решение командной строки.
ryanpcmcquen