I want to be able to hide and show the Wi-Fi menu item from the Terminal. Can I do this with the defaults
command?
I've narrowed it down to com.apple.systemuiserver
. It looks like this:
{
"NSWindow Frame NoTimeLeft" = "471 437 475 163 0 0 1366 746 ";
"__NSEnableTSMDocumentWindowLevel" = 1;
menuExtras = (
"/System/Library/CoreServices/Menu Extras/Script Menu.menu",
"/System/Library/CoreServices/Menu Extras/AirPort.menu",
"/System/Library/CoreServices/Menu Extras/TimeMachine.menu",
"/System/Library/CoreServices/Menu Extras/Battery.menu",
"/System/Library/CoreServices/Menu Extras/Clock.menu"
);
}
Best Answer
A big difficulty here is that the
menuExtras
key incom.apple.systemuiserver
is an array that's reordered when you drag your Menu Extras around in the menu bar (and add and remove them).In your case cited above, the Wi-Fi Menu Extra is the second item (which is array index 1 because these arrays are zero-indexed like C arrays), so you could remove it with
PlistBuddy
, which isn't in your$PATH
because it's hidden in/usr/libexec
. You have to usePlistBuddy
because thedefaults
command doesn't have syntax for specifying an array index. Then kill SystemUIServer to get it to reload:To add it back in, do something like this:
Note that this will break if you ever remove or add Menu Extras such that the Wi-Fi Menu Extra is not the second Menu Extra from the left in your menu bar. With a little more scripting work you could walk the
menuExtras
array looking for the AirPort (Wi-Fi) menu extra, note its index, then feed that into your PlistBuddy command.