Journal Comment savoir si le style sombre est actif ?

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
23
11
déc.
2023

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 :

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 des portails XDG Desktop. 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 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 et la demande de fusion qui met à jour le code d'elementary OS pour utiliser la nouvelle interface.

Finalement, la commande que je dois exécuter est celle-ci :

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 à (<uint32 1>,))

Enfin, après avoir cherché toutes ces informations, je me suis rendu compte que le site 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 avec toutes ces informations.

Toute cette recherche m'a amené à ce petit correctif de quelques lignes dans mon fichier vimrc.

  • # Marche pas chez moi :-(

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Sous Xfce, avec les paquets xdg-desktop-portal, xdg-desktop-portal-gtk installés, je lance la commande que tu as trouvée :

    $ gdbus call --session --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.Settings.Read org.freedesktop.appearance color-scheme
    Erreur : GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: L’interface « org.freedesktop.portal.Settings » n’existe pas pour l’objet à l’emplacement /org/freedesktop/portal/desktop

    J’ai loupé quoi ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.