it-swarm-eu.dev

GTK - Povoluje / nastavuje temné téma pro jednotlivé aplikace

Existuje způsob, jak nastavit gtk-application-prefer-dark-theme pro aplikaci?

To je obvykle nastaveno v kódu aplikací. Aplikace jako Eye of Gnome a Totem ji zapnou. Chci, když to uživatel zapne, na základě jednotlivých aplikací.

Pro terminál gnome obvykle používám bílý text na barevném schématu na černém pozadí a mít tmavý okraj okna by zlepšil celkový vzhled.

Chci to také zapnout pro vlc.

62

S gtk+ ≥ 3.12 můžete načíst konkrétní téma a jeho variantu (tmavý, světlý) na aplikaci1 základ prostřednictvím proměnné prostředí GTK_THEME=theme:variant. Podle gtk+ referenční příručka :

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.

Takže načíst2  tmavá varianta, kterou byste spustili:

GTK_THEME=Adwaita:dark gedit

Stejně tak pro dosažení opaku (když je výchozí motiv tmavý) načtete světlou variantu:

GTK_THEME=Adwaita:light gedit

Pokud jej chcete použít pomocí vlastního spouštěče (.desktop file) budete muset k příkazu v řádku env připojit Exec:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Stojí za zmínku, že - podle rozhodnutí devs - novější gnome-terminal má svou vlastní konfiguraci prostřednictvím nabídky> předvolby a ignoruje téma. Také, protože se jedná o poněkud nové věci, některé aplikace gtk + 3 nemusí (zatím) ctít GTK_THEME proměnná prostředí.
2: Zdá se, že to nefunguje, pokud již máte spuštěnou instanci této aplikace, např. pokud nautilus již běží v temném režimu, pak běží GTK_THEME=Adwaita:light nautilus otevře nové okno nautilus, ale stále v tmavém režimu. Nevím, jestli se jedná o funkci nebo chybu ...

72
don_crissti

U aplikací GTK + -3 můžete vynutit variantu temného motivu pomocí nastavení GtkSettings 'settings.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

U aplikací jiných než GTK +, jako je vnc, můžete stále vynucovat dekorace tmavých oken nastavením vlastnosti _GTK_THEME_VARIANT X typu UTF8_STRING Na dark. Chcete-li to provést pomocí xprop, zadejte následující příkaz a poté klikněte na okno:

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

xprop může také vybírat okna podle vlastnosti WM_NAME (popisek v záhlaví) nebo podle ID okna:

$ 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

Chcete-li získat ID a jména okna, použijte xlsclients -l.

22
Florian Müllner

Zde je bash skript, který jsem použil ke spuštění aplikace s jiným motivem. Nepoužil jsem to už roky, takže nevím, jestli to bude fungovat s aktuální 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]"

Zde je pár informací, které jsem dostal z archivů ubuntu fourms. Nejste si jisti, zda to bude problém. ( zde ) K dispozici je také blogový příspěvek, který podrobně popisuje tuto metodu. ( zde ) a ( zde ). Na tomto webu je také podobná otázka, která již byla zodpovězena. ( zde )

V rámci gnome získají aplikace své téma od démona gnome-settings-daemon. Toto okamžitě aplikuje jakoukoli změnu motivu na všechny aktivní aplikace, což znemožňuje změnu motivu na aplikaci.

7
giodamelio

Konkrétně pro gnome-terminal, můžete použít následující pro ztmavení konkrétní aplikace:

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

Napsal jsem za to malý skriptový skript:

#!/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

Používá https://github.com/BurntSushi/ripgrep pro REGEX

0
user2452171