Je suis en train de comprendre cela moi-même. Pas encore là, mais dans la bonne direction:
- Chaque "espace" de Mission Control reçoit un
uuid
qui lui est attribué...
- ... excepté pour le tout premier (à ma connaissance), et celui du Dashboard.
Vous pouvez les lire ici:
$ defaults read com.apple.spaces
$ defaults read com.apple.desktop
Emplacements des fichiers:
~/Bibliothèque/Préférences/com.apple.spaces.plist
~/Bibliothèque/Préférences/com.apple.desktop.plist
Voici le mien. J'ai quatre espaces activés, et trois entrées apparaissent:
$ defaults read com.apple.spaces
{
spaces = (
{
type = 0;
uuid = "9F552977-3DB0-43E5-8753-E45AC4C61973";
},
{
type = 0;
uuid = "44C8072A-7DC9-4E83-94DD-BDEAF333C924";
},
{
type = 0;
uuid = "6FADBDFE-4CE8-4FC9-B535-40D7CC3C4C58";
}
);
}
Si vous supprimez un espace, cette entrée sera retirée du fichier. Si vous ajoutez un espace, une entrée sera ajoutée. Encore une fois, il n'y a jamais d'entrée pour le Bureau (Desktop) 1 ou le Dashboard.
Je ne suis pas sûr s'il existe une API publique pour déterminer quel uuid
d'espace est affiché sur un écran. Je suppose que pas de uuid
signifie l'écran 1, et les autres signifient l'écran 1+n.
J'ai jeté un coup d'œil rapide à la bibliothèque de l'AppleScript Editor (Fenêtre ---> Bibliothèque) et je n'ai pas vu d'entrées sous Événements Système pour spaces
. C'est probablement quelque chose qui peut être fait avec Cocoa, peut-être via une API privée, mais je ne suis pas sûr concernant AppleScript.
MISE À JOUR - 23 juillet 2011
Il semble que le Dock contrôle Mission Control. Vous pouvez récupérer ses fichiers d'en-tête de cette manière:
- Aller à:
/Bibliothèque/Services de Base/Dock
- Cliquer-droit et choisir Afficher le contenu du paquet
- Naviguer:
/Contenu/MacOS/
- Copier-coller le binaire
Dock
sur votre bureau.
- Exécuter:
$ class-dump ~/Bureau/Dock
Cela va afficher tous ses fichiers d'en-tête (c'est long, presque 7 500 lignes). Vous pouvez voir les chaînes spaceUUID
apparaissant dedans. Il y a une classe appelée WVSpace
qui semble représenter un seul Espace dans Mission Control, et beaucoup d'autres classes WV*.
Je vais continuer à examiner cela demain; trop fatigué maintenant. :)
MISE À JOUR - 24 juillet 2011
À l'intérieur du Dock, il y a une classe appelée WVSpaces
. Elle a un certain nombre d'attributs incluant:
WVSpace *currentSpace;
unsigned int currentWorkspace;
WVSpace *nextSpace; // Espace à droite???
WVSpace *previousSpace; // Espace à gauche???
BOOL currentSpaceIsDashboard;
BOOL dashboardIsCurrent;
... beaucoup plus...
Chaque classe WVSpace
a un attribut NSString *_uuid;
, qui est probablement son SpaceUUID. Donc théoriquement, vous pouvez obtenir le numéro de l'espace actuel de cette manière:
WVSpace *currentSpace = [[WVSpaces sharedInstance] currentSpace];
NSString *currentSpaceUUID = [currentSpace _uuid]; // Chaîne vide si espace principal???
Le problème est, comment accéder à la classe privée WVSpaces
enfouie à l'intérieur du Dock? Je suppose qu'elle est Singleton car elle a un attribut NSMutableArray *_spaces;
, probablement avec chaque espace répertorié dedans. Seul un espace est affiché à la fois (cela reste vrai si vous utilisez plusieurs moniteurs; l'espace s'étend sur les deux), donc il est logique d'avoir une seule instance WVSpaces
.
Il semble donc que cela nécessitera quelques piratages SIMBL du Dock pour accéder à WVSpaces
.