Не правда ли, когда вам попадался совет, в котором нужно было изменять какую-либо переменную defaults, вы испытывали интерес – а как эта переменная была найдена?

Например, “defaults read -globalDomain com.apple.mouse.scaling“?

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

Я хочу показать, как можно сопоставить параметр в настройках системы (или программы) значению, доступному через механизм defaults.

Получить полное содержимое всех доменов defaults можно командой:

$ defaults read

Если вы знаете, что ищете, то можно поискать параметр через grep или же открыв результат в текстовом редакторе, и там сделать поиск.

$ defaults read | grep mouse | more
"com.apple.mouse.scaling" = 2;

Если же вы не имеете понятия, что именно искать, но знаете, где меняется параметр в настройках, то вам пригодится мой метод.

Пару дней назад Арсений задал мне вопрос о скорости автоповтора при нажатии клавиши на клавиатуре. Эти параметры находятся в System Preferences/Keyboard:

Я захотел найти, как их можно поменять через defaults.

Много лет назад я активно расправлялся с играми под MS DOS, находя счётчики жизни резидентным дебагером (уже не помню его название). Суть сводилась к снятию дампа памяти до изменения счётчика, потом после его изменения и сравнение. Если данных получалось слишком много, то я повторял процедуру. Всё просто.

Здесь применим тот же подход. Снимаю дамп всех параметров:

$ defaults read > dump1.txt

Сдвигаю нужные мне ползунки в настройках. Жду (данные сбрасываются на диск не в ту же секунду, я для гарантии жду секунд 10-20). Снова снимаю дамп:

$ defaults read > dump2.txt

Сравниваем файлы diff’ом и находим нужные нам данные:

$ diff -u dump1.txt dump2.txt
-        InitialKeyRepeat = 15;
-        KeyRepeat = 2;
+        InitialKeyRepeat = 94;
+        KeyRepeat = 60;

Теперь нужно найти домен, к которому относится параметр, для чего открываем dump1.txt в редакторе и ищем, куда относится InitialKeyRepeat. Я сделал это через grep:

$ cat dump1.txt | grep -250 InitialKeyRepeat | more
"Apple Global Domain" =     {
...

Домен найден, параметр известен, проверяем:

$ defaults read "Apple Global Domain" KeyRepeat
2
$ defaults read "Apple Global Domain" InitialKeyRepeat
15

Поменять параметр можно так (я не экспериментировал и значение привожу “с потолка”):

$ defaults write "Apple Global Domain" KeyRepeat 3

Вуаля!

Если вас заинтересовала тема defaults, вы можете почитать другие мои статьи на эту тему: