8 votes

Comment les couleurs sont-elles représentées dans les fichiers de configuration de Terminal.app sous OS X ?

Je souhaite transférer les valeurs de couleur que j'ai créées pour OS X Terminal vers des applications sur d'autres plates-formes, telles que Linux. Je connais les méthodes habituelles de représentation des valeurs de couleur telles que RGB, HSB, L*A*B, HEX, etc. Cependant, la méthode <data> utilisées dans les fichiers de configuration du terminal sont différentes des autres méthodes utilisées pour définir les couleurs. J'aimerais avoir de l'aide pour comprendre ce XML <data> par rapport à d'autres valeurs de couleur.

À titre d'exemple, j'ai utilisé la fonction intégrée de Sélecteur de couleurs pour changer manuellement le schéma ANSI par défaut de Terminal avec les valeurs HSB de l'excellent ouvrage d'Ethan Schoonover, intitulé Solarisé. J'ai ensuite enregistré ces paramètres dans un fichier XML .plist appelé Solarized Dark xterm-256color.terminal (Le contenu de ce fichier peut être trouvé aquí .)

J'ai choisi arbitrairement brblack de ce fichier en tant que valeur de couleur unique à des fins de comparaison :

    <key>ANSIBrightBlackColor</key>
    <data>
    YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS
    AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NOMCAw
    LjE2NDUgMC4yMQAQAoAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIU
    WE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2Jx
    c3V6hY6WmaK0t7wAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAvg==
    </data>

Cela semble beaucoup différente (et plus complexe) que la simple valeur HSB 193 100 21 extrait de l'ouvrage de Schoonover table :

    SOLARIZED HEX     16/8 TERMCOL  XTERM/HEX   L*A*B      RGB         HSB
    --------- ------- ---- -------  ----------- ---------- ----------- -----------
    base03    #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21
    ...

Pourquoi la valeur simple 193 100 21 est convertie en une chaîne de données de 5 lignes ? Quelles sont les autres informations contenues dans cette chaîne ? Enfin, et c'est le plus important, comment puis-je convertir une telle chaîne en valeurs de couleur standard simples que je peux utiliser sur d'autres plates-formes ?

7voto

Fuzzy Purple Monkey Points 702

bplist signifie liste de propriétés binaires, qui peut être convertie en XML avec plutil -convert xml1 . À l'intérieur de chaque liste pour une couleur se trouve une autre clé de données pour les valeurs RVB fractionnaires.

/usr/libexec/PlistBuddy -x -c 'Print "Window Settings":"My Theme"' ~/Library/Preferences/com.apple.Terminal.plist|tr -d '\n\t'|grep -o '[^>]*</key><data>[^<]*'|while read l;do echo ${l%%<*} $(base64 -D<<<${l##*>}|plutil -convert xml1 - -o -|awk '/<data>/{getline;print}'|tr -d '\t'|base64 -D);done

Le résultat ressemble à ceci :

ANSIBlueColor 0.4769933663 0.4769933663 0.9314516129
ANSICyanColor 0.2666655827 0.8165705831 0.8588709677
ANSIGreenColor 0.428833897 0.8508064516 0.490967087
ANSIMagentaColor 0.9072580645 0.4499707336 0.9072580645
ANSIRedColor 0.9072580645 0.508503512 0.508503512
ANSIYellowColor 0.9072580645 0.9072580645 0.3914379553
CursorColor 0.9998760223 0.999984026 0.999786377
SelectionColor 0.3899414837 0.4639441073 0.5917825699
TextBoldColor 0.9441435337 0.4102420509 0.427282244
TextColor 1 0.99997437 0.9999912977

3voto

Aaron Klap Points 186

Il s'agit de données sérialisées codées en base64.

Base64 + original sérialisé :

 YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS
AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NOMCAw
LjE2NDUgMC4yMQAQAoAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIU
WE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2Jx
c3V6hY6WmaK0t7wAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAvg==

En utilisant quelque chose comme http://www.base64decode.org/ vous pouvez voir la version décodée :

bplist00X$versionX$objectsY$archiverT$topU$null    
UNSRGB\NSColorSpaceV$classN0 0.1645 0.21Z$classnameX$classesWNSColorXNSObject_NSKeyedArchiverTroot#-27;AHN[bqsuz

À ce stade, la partie intéressante est la suivante : NSKeyedArchiver qui est le moteur de sérialisation intégré à Objective-C, dans lequel les applications OSX sont bien sûr écrites.

Quant à la question qui se cache derrière votre question, à savoir comment faire la conversion entre cette représentation et d'autres représentations standard de la couleur, la réponse est malheureusement difficile et peu fiable.

Il est clair que vous savez comment prendre une valeur HSB et générer les données encodées. Si vous vouliez prendre le temps de faire de la rétro-ingénierie sur la façon dont l'archivage se produit, vous seriez en mesure de le faire. Je ne sais pas si vous êtes familier avec le langage Objective C, mais vous pourriez probablement créer un programme simple qui fait la conversion entre les deux. En résumé, cela ne vaut probablement pas la peine d'y consacrer du temps.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X