Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I would like to explore some new tweaks which can be done by the "defaults write" command in OS X(ML).

What can I do to find them out myself rather than hunting online for known tweaks?

share|improve this question
add comment

2 Answers 2

Disclaimer: I’m the author of ~/.osx, a collection of defaults write settings. These are the techniques that I use to find settings. Let me know if there is a better/easier method I didn’t mention here!


For most non-hidden settings, this is how you can find the correct preference keys in Terminal.app:

defaults read > a
# Change the setting
defaults read > b
diff a b

For hidden settings, it gets trickier. You can use the command-line strings utility on any binary executable and see if any of the resulting text looks like a preference key. E.g.:

strings /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder

Here’s another example that will look through all .framework files in /System/Library/Frameworks/ and filter the output somewhat:

strings /System/Library/Frameworks/*.framework/Versions/Current/* /System/Library/Frameworks/*/Frameworks/*/Versions/Current/* 2> /dev/null | grep -E '^[a-zA-Z0-9_.-]{10,80}$' | sort | uniq

There’s also a tool called GDB which can be used to find hidden preferences.

share|improve this answer
    
Thank you very much and I can't believe that you are replying me! I knew about your nice list at github long time ago btw. Thank you very very much! Will try this now. –  Tom S Jul 31 '12 at 11:16
1  
@Lri FWIW, I’ve done a clean Mountain Lion install just last week and defaults read; works fine here. –  Mathias Bynens Jul 31 '12 at 18:34
add comment

Another strings command:

for f in $(mdfind kMDItemContentType==public.unix-executable -onlyin /System/Library/); do strings $f 2> /dev/null | grep -E '^[[:alnum:]_.-]{10,80}$' | grep ^Apple | sort -u | sed "s/^/${f##*/} /g"; done

sudo opensnoop -n cfprefsd shows what property lists are modified. You can use fseventer to display other file system changes in real time.

defaults has a find subcommand:

$ defaults find nsquitalw
Found 1 keys in domain 'Apple Global Domain': {
    NSQuitAlwaysKeepsWindows = 1;
}

Header files often contain definitions for preference keys:

grep PreferenceKey -r ~/Code/Source/WebKit/ | grep '\.h:'
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.