it-swarm.it

GTK - Abilita / imposta il tema scuro in base all'applicazione

C'è un modo per impostare gtk-application-prefer-dark-theme per un'applicazione?

Questo è normalmente impostato nel codice dall'applicazione. App come Eye of Gnome e Totem lo accendono. Voglio, come utente, accenderlo in base all'applicazione.

Per gnome-terminal, di solito uso un testo bianco su una combinazione di colori di sfondo nero e avere il bordo scuro della finestra migliorerebbe l'aspetto generale.

Voglio anche accenderlo per vlc.

62

Con gtk+ ≥ 3.12 puoi caricare un tema specifico e la sua variante (scuro, chiaro) su un'applicazione1 base tramite la variabile d'ambiente GTK_THEME=theme:variant. Come da gtk+ manuale di riferimento :

GTK_THEME.  If set, makes GTK+ use the named theme instead of the theme that is
specified by the gtk-theme-name setting [...] It is also possible to specify a
theme variant to load, by appending the variant name with a colon, like this:
GTK_THEME=Adwaita:dark.

Quindi, per caricare2 la variante scura che avresti eseguito:

GTK_THEME=Adwaita:dark gedit

Allo stesso modo, per ottenere il contrario (quando il tema predefinito è scuro), devi caricare la variante chiara :

GTK_THEME=Adwaita:light gedit

Tieni presente che se desideri utilizzarlo tramite un launcher personalizzato (.desktop file) dovrai anteporre env al comando nella riga Exec:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Vale la pena notare che - secondo la decisione degli sviluppatori - più recente gnome-terminal ha una propria configurazione tramite menu> preferenze e ignora il tema. Inoltre, poiché si tratta di cose piuttosto nuove, alcune applicazioni gtk + 3 potrebbero non (ancora) onorare il GTK_THEME variabile d'ambiente.
2: Questo non sembra funzionare se hai già un'istanza in esecuzione di tale applicazione, ad es. se nautilus è già in esecuzione in modalità oscura, allora esegue GTK_THEME=Adwaita:light nautilus aprirà una nuova finestra nautilus ma ancora in modalità oscura. Non so se questa è una funzionalità o un bug ...

72
don_crissti

Per le applicazioni GTK + -3, puoi applicare la variante del tema scuro usando le impostazioni di GtkSettings.ini:

$ mkdir -p $HOME/.config/gnome-terminal/gtk-3.0 # the path before gtk-3.0 is arbitrary
$ cat >> $HOME/.config/gnome-terminal/gtk-3.0/settings.ini << EOF
[Settings]
gtk-application-prefer-dark-theme=true
EOF
$ echo 'alias gnome-terminal="XDG_CONFIG_HOME=$HOME/.config/gnome-terminal gnome-terminal" >> $HOME/.bashrc

Per applicazioni non GTK + come vnc, puoi comunque applicare decorazioni per finestre scure impostando la proprietà _GTK_THEME_VARIANT X di tipo UTF8_STRING Su dark. Per fare ciò con xprop, digita il seguente comando e fai clic sulla finestra in seguito:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"

xprop può anche selezionare le finestre dalla proprietà WM_NAME (l'etichetta della barra del titolo) o dall'id della finestra:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -name "Spotify Premium - Linux Preview"
$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -id 0x380002b

Per ottenere ID e nomi delle finestre, utilizzare xlsclients -l.

22

Ecco uno script bash che ho usato per lanciare un'applicazione con un tema diverso. Non lo uso da anni, quindi non so se funzionerà con l'attuale GTK.

#!/bin/bash
# lauch a gtk application with a different theme
# set GTKRCFILE variable to your favourite theme
GTKRCFILE=Clearlooks
GTK2_RC_FILES=/usr/share/themes/"$GTKRCFILE"/gtk-2.0/gtkrc "[email protected]"

Ecco un po 'di informazioni che ho rimosso dagli archivi di Ubuntu Fourms. Non sono sicuro se sarà un problema. ( qui ) C'è anche un post sul blog che descrive un po 'di più questo metodo. ( qui ) e ( qui ). C'è anche una domanda simile su questo sito a cui è già stata data una risposta. ( qui )

Sotto gnome, le app prendono il tema dal gnome-settings-daemon. Ciò applica istantaneamente qualsiasi modifica del tema a tutte le applicazioni attive, rendendo impossibile la modifica del tema per ogni applicazione.

7
giodamelio

In particolare per gnome-terminal, puoi utilizzare quanto segue per scurire l'applicazione specifica:

gsettings set org.gnome.Terminal.Legacy.Settings theme-variant 'dark'
1
Nick Bull

Ho scritto un piccolo script per questo:

#!/bin/bash


if [ $# -eq 0 ]; then
    xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"
    exit $?
fi


GTK_THEME="$(gsettings get org.gnome.desktop.interface gtk-theme)"
export  GTK_THEME="${a%%:*}:dark"
export GTK_THEME_VARIANT="dark"
"[email protected]" & PID="$!"
echo "started darkening for PID=$PID"
cnt=0
while :; do
    if [ $cnt -lt 1000 ]; then
        sleep .1
        let 'x=x-1'
    else
        sleep 5
    fi
    if ! kill -0 $PID 2>/dev/null; then
        echo "darkening for PID=$PID done"
        exit 0
    fi
    REGEX="$(echo $PID | cat - <(command ps -o pid:1 --no-headers --ppid $PID) | paste -sd "|" -)"
    wmctrl -lp \
        | rg -i "^(0x[a-f0-9]+)\s+\d+\s+($REGEX)\s" -o --replace '$1' \
        | xargs -I @ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -id @
done

Sta usando https://github.com/BurntSushi/ripgrep per REGEX

0
user2452171