Я иногда вижу howto, которые позволяют вам изменять функциональность некоторых приложений на OSX с помощью defaults
командной строки. Я знаю, что люди находят эти директивы конфигурации, сканируя приложение. Как это делается?
исправить: мог бы поклясться, что это было option
. Моя вина.
решение1
Вы можете использовать defaults
не только для изменения этих значений, но и для их перечисления.
defaults read -g
показывать "глобальные" параметры, а defaults read com.company.ProgramName
показыватьзначения по умолчанию(т.е. параметры конфигурации) для конкретной программы. В этом контексте, com.company.ProgramName
являетсяидентификатор пакетапрограммы, например com.apple.TextEdit
или com.culturedcode.Things
.Подробнее об этом.
Например, запустите defaults read com.apple.Finder
и вы найдете строку, которая говорит AppleShowAllFiles = FALSE
или что-то похожее. Теперь будьте авантюрны и запустите defaults write com.apple.Finder AppleShowAllFiles -boolean TRUE
и перезапустите Finder, чтобы посмотреть, что произойдет.
Для получения дополнительной информации об использовании defaults
введите , man defaults
чтобы просмотреть документацию. Это может стать довольно сложным, и некоторые вещи, связанные со списками и словарями, практически невозможны. Как только вы доберетесь до этого, посмотрите /usr/libexec/PlistBuddy
— на этом сайте есть несколько примеров использования, просто используйте функцию поиска.
Узнать идентификатор пакета конкретной программы:
Чтобы узнать, что использует ваше приложениеcom.vendor.yourapp, щелкните правой кнопкой мыши по пакету приложений, выберитеПоказать содержимое упаковки, перейдите кСодержание, открытьИнформация.plistс помощью текстового редактора или лучше редактора списка свойств, напримерРедактор списка объектов недвижимостиилиXкод 4(оба являются частью инструментов разработчика Apple) и найдитеCFBundleIdentifierили т.п.
Другой инструмент, который вы можете использовать, это strings
. Он отобразит все строки (т.е. потенциально полезные последовательности символов) в двоичном файле. Обратите внимание, что это даеттоннложных срабатываний, поскольку также отображаются вызовы функций Objective-C, а также обычный вывод, отображаемый в пользовательском интерфейсе.
Секретытакже предлагает базу данных скрытых настроек для OS X, отсортированных по приложению. Их можно изменить с помощью defaults
. Для вашего удобства вы также можете загрузить Preference Pane с веб-сайта, что позволяет вам изменять их через ваши System Preferences.
решение2
#!/bin/sh
# find key names in ~/Library/Preferences/`osascript -e 'id of app "iTunes"'`.plist
defaults read com.apple.iTunes | ruby -e 'puts STDIN.read.scan(/^ \"?([a-zA-Z_.\-]+?)\"? /)' > keys.txt
# extract identifiers from a binary
# (the output is tens of thousands of lines even after grepping)
strings - /Applications/iTunes.app/Contents/MacOS/iTunes | egrep "^[a-zA-Z][a-zA-Z_.\-]{7,}$" | ruby -e 'puts STDIN.read.split("\n").uniq' > strings.txt
# the identifiers for preferences often appear near each other
for x in `cat /0/keys.txt`; do
grep -C 10 "$x" strings.txt
done | ruby -e 'puts STDIN.read.split("\n").uniq' > strings2.txt
Другой метод с использованием отладчика GNU:arcticmac.home.comcast.net/~arcticmac/tutorials/gdbFindingPrefs.html