URL: https://linuxfr.org/users/trim/journaux/comment-savoir-si-le-style-sombre-est-actif Title: Comment savoir si le style sombre est actif ? Authors: Adrien Dorsaz Date: 2023年12月11日T07:24:28+01:00 License: CC By-SA Tags: freedesktop, portal, dbus, vim et darkmod Score: 23 Cher journal, Au démarrage de mon éditeur de texte _vim_, je souhaite qu'il choisisse un thème sombre ou claire selon la préférence actuelle de mon bureau. Je n'en ai besoin que pendant le lancement, parce que je ne change pas très souvent ce paramètre : la journée je préfère le thème clair et le soir le sombre. Si vraiment, j'ai besoin de changer le style de _vim_ sans le redémarrer, je peux utiliser la commande : ``` :set background=dark ``` Jusqu'à récemment, je n'utilisais que le bureau _GNOME_, j'utilisais donc cette commande pour retrouver l'information : ```sh gsettings get org.gnome.desktop.interface color-scheme ``` Maintenant que j'utilise aussi _Cinnamon_ avec _Linux Mint_ régulièrement, cette commande ne fonctionne plus : elle fait clairement référence au bureau _GNOME_ puisqu'elle utilise l'outil de configuration _gsettings_ (fourni par _GLib_) et un _namespace_ lié à _GNOME_. Pour aller vite, il est possible d'adapter cette commande pour le bureau _Cinnamon_. Ce n'est pas idéal, parce que j'ai maintenant deux lignes de configurations différentes de _vim_ juste pour le choix du thème. En plus, si je souhaite tester d'autres bureaux Linux, je devrais ajouter à chaque fois des lignes spécifiques dans ma configuration. Une solution à ce problème est d'utiliser l'interface _[D-Bus](https://en.wikipedia.org/wiki/D-Bus)_ des [portails XDG Desktop](https://flatpak.github.io/xdg-desktop-portal/). Ces portails permettent aux développeurs logiciels d'utiliser des fonctionnalités communes aux différents bureaux Linux sans avoir besoin de connaître le bureau actuellement utilisé. Je n'avais jamais utilisé _D-Bus_ avant et j'ai galéré un peu à comprendre comment l'utiliser. Pour m'aider, j'ai retrouvé cette [discussion](https://github.com/flatpak/xdg-desktop-portal/issues/629) qui propose d'ajouter la préférence de style dans _XDG Desktop Portal_. Elle m'a permis de savoir que je devais rechercher : un _namespace_ `org.freedesktop.appearance` et une clé `color-scheme`. J'ai ensuite trouvé que je pouvais utiliser _gdbus_ et _dbus-send_ pour interroger _D-Bus_. Seulement, leur interface n'est pas vraiment faite pour chercher ce qui existe, mais plutôt pour consulter. Pour m'aider à chercher, j'ai utilisé le logiciel [d-spy](https://gitlab.gnome.org/GNOME/d-spy) et la [demande de fusion](https://github.com/elementary/granite/pull/529/files) qui met à jour le code d'_elementary OS_ pour utiliser la nouvelle interface. Finalement, la commande que je dois exécuter est celle-ci : ```sh gdbus call --session --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.Settings.ReadOne org.freedesktop.appearance color-scheme | grep -Po "(?<=uint32 )\d" ``` En détail : * `gdbus call`: Utilise la commande gdbus avec la méthode _call_ pour demander une valeur * `--session`: Nous voulons avoir des informations sur la session de l'utilisateur et non pas du système (`--system`). * `--dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop`: Je ne connais pas assez _D-Bus_ pour expliquer le détail, mais j'ai clairement vu avec _d-spy_ que c'était ces valeurs que j'avais besoin pour interroger les _XDG Desktop portal_ * `--method org.freedesktop.portal.Settings.ReadOne`: Depuis le patch pour _elementary OS_, j'ai trouvé que j'avais besoin du portail _Settings_ et de sa méthode _ReadOne_. _d-spy_ m'a permis de savoir que cette méthode attend deux paramètres, un _namespace_ et une clé * `org.freedesktop.appearance color-scheme`: Les paramètres de la méthode définie juste avant. * ` | grep -Po "(?<=uint32 )\d"`: J'utilise _grep_ pour nettoyer le résultat de la commande afin de n'avoir plus que le chiffre de 0 à 2 qui correspond à la préférence (sinon la sortie ressemble à `(,)`) Enfin, après avoir cherché toutes ces informations, je me suis rendu compte que le site [XDG Desktop Portal](https://flatpak.github.io/xdg-desktop-portal/) donne un lien directement vers une page qui liste toutes les interfaces disponibles en détail et comment les interroger. J'aurais pu simplement faire une recherche du terme _color-scheme_ et je serais arrivé à la bonne [section](https://flatpak.github.io/xdg-desktop-portal/docs/#gdbus-org.freedesktop.portal.Settings) avec toutes ces informations. Toute cette recherche m'a amené à ce [petit correctif](https://gitlab.adorsaz.ch/adrien/config/-/commit/f003dcb0b85ad3a1cfae01b9f8d601e9e1995bc3?view=parallel) de quelques lignes dans mon fichier _vimrc_.

AltStyle によって変換されたページ (->オリジナル) /