I'm trying to figure out how to get the current space # from mission control. Source would be helpful, but more helpful would be info on how to figure this out myself. I've written a few applescripts, but more often than not it seems like any time I need to do something new (that I can't find dictionary documentation for) it falls under the category of "tell this specific app (e.g. "System Events") this very specific thing" and I've no clue how I would actually figure that out.
Specifically what I am trying to do:
I hate the new mission control in OSX 10.7. I want my spaces "grid" back since I used it all the time. I used to navigate between spaces using arrow keys (e.g. ALT+↑) every few seconds. Now I'm stuck with this clunky 1x9 array of spaces instead of an elegant 3x3 grid. I've re-mapped all my spaces to use the number pad, which partially takes care of the problem (since it is a 3x3 grid), but only when I have an external keyboard attached.
Basically, I want to be able to use ALT+↑ and ↓ again, but to do so I need to detect the current space # so that I can switch from space 5-->2, for example.
Dave's answer below, although far more detailed than I expected, requires writing an app to do this (plus it still doesn't fully answer the question). If it's at all possible, I'd rather just bind a few keys to an applescript.


I'm trying to figure this out myself. Not there yet, but in the right direction:
uuidassigned to it...You can read them here:
File locations:
Here's mine. I have four spaces enabled, and three entries show up:
If you delete a space, that entry will get removed from the file. If you add a space, an entry will be added. Again, there's never an entry for Desktop 1 or Dashboard.
I'm not sure if there's a public API to figure out what space
uuidis being displayed on a display. I'd assume that nouuidmeans Display 1, and the others' mean Display 1+n.I took a quick glance through the AppleScript Editor Library (Window ---> Library) and didn't see any entries under System Events for
spaces. This is probably something that can be done with Cocoa, perhaps via private API, but I'm not sure about AppleScript.UPDATE - July 23, 2011
It looks like Dock controls Mission Control. You can grab its header files like so:
/System/Library/CoreServices/Dock/Contents/MacOS/Dockbinary to your desktop.$class-dump ~/Desktop/DockThat'll spit out all of its header files (it's long; almost 7,500 lines). You can see the
spaceUUIDstrings appearing in there. There's a class calledWVSpacewhich appears to represent a single Space in Mission Control, and a lot of other WV* classes.I'll keep looking at it tomorrow; too tired now. :)
UPDATE - July 24, 2011
Inside Dock there's a class called
WVSpaces. It has a number of attributes including:Each
WVSpaceclass has anNSString *_uuid;attribute, which is likely its SpaceUUID. So theoretically you can get the current space number like so:The trick is, how to get access to the private
WVSpacesclass buried inside of Dock? I'm assuming it's Singleton as it has anNSMutableArray *_spaces;attribute, probably with every space listed in it. Only one space gets displayed at a time (this holds true if you're using multiple monitors; the space spans across both of them), so it makes sense to only have oneWVSpacesinstance.So it looks like it'll require some SIMBL hacking of Dock to gain access to
WVSpaces.