Czy mogę zastosować inny motyw GTK3 od głównego do indywidualnej aplikacji?

46

Na przykład, czy mogę zachować Ambiance jako główny motyw, ale przypisać motyw podstawowy do aplikacji elementarza?

Rossi
źródło
8
Aktualne odpowiedzi ara na temat Gtk2, pytam o Gtk3.
neonboy
Zredagowałem pytanie, aby lepiej odzwierciedlić to, czego szukasz. Przykro mi, ale krótka odpowiedź z moich badań brzmi „ nie” , nie można obejść się bez konieczności poświęcenia wysiłku na stworzenie nowego „hybrydowego” motywu, jak wyjaśnił @Kush :( To już nie jest tak proste jak GTK2.
ish

Odpowiedzi:

32

Możesz użyć zmiennej środowiskowej GTK, GTK_THEME=elementaryaby uruchomić aplikację z podstawowym motywem. Na przykład uruchomienie GTK_THEME=elementary pantheon-filesspowoduje uruchomienie podstawowej aplikacji Pliki przy użyciu podstawowego motywu GTK.

Aby mieć to zastosowanie przy każdym uruchomieniu określonej aplikacji, najlepszą opcją jest prawdopodobnie utworzenie niestandardowego pliku .desktop (programu uruchamiającego).

Utwórz niestandardowy plik .desktop

  1. Otwórz przeglądarkę plików
  2. Nawigować do /usr/share/applications/
  3. Skopiuj program uruchamiający (podświetl i Ctrl + C) dla aplikacji, którą chcesz uruchomić z motywem podstawowym
  4. Przejdź do ~/.local/share/applications/programu uruchamiającego i wklej go (Ctrl + V)
  5. Kliknij prawym przyciskiem myszy i otwórz program uruchamiający za pomocą edytora tekstu
  6. Zmodyfikuj wiersz, zaczynając od, Exec=aby uwzględnić, Exec=env GTK_THEME=elementarya następnie poprzednią istniejącą zawartość linii. (Tak Exec=pantheon-filesby się stało Exec=env GTK_THEME=elementary pantheon-files)
  7. Zapisz i zamknij plik

Następnym razem, gdy uruchomisz aplikację z Unity (lub wybranego uruchamiania aplikacji), użyje ona podstawowego motywu.

Bonus: spraw, aby działał, gdy używasz wiersza poleceń

Możesz także chcieć, aby aplikacja uruchamiała się z podstawowym motywem podczas uruchamiania jej z wiersza poleceń. Aby to zrobić:

  1. Otwórz aplikację Terminal
  2. Wpisz alias pantheon-files="GTK_THEME=elementary pantheon-files"(zamieniając pantheon-filesna żądaną aplikację)
  3. naciśnij enter

Ostrzeżenia:

  1. To nie zmieni motywu menedżera okien na motyw podstawowy.
  2. To (zgodnie z projektem) będzie miało zastosowanie tylko do twojego konta, a nie roota lub kogokolwiek innego na komputerze.
  3. Nazwy motywów to cAsE-sEnsItiVe i powinny być dopasowane do nazwy folderu motywu.

Źródła:

  1. Jestem podstawowym współpracownikiem;)
  2. Instrukcja obsługi GTK + 3: Uruchamianie aplikacji GTK +
  3. Ustaw zmienną w pliku .desktop
Cassidy James
źródło
Niezła odpowiedź, ale nie mogę tego zrobić z żadnym motywem. Czy możesz podać przykład przy użyciu terminala find /usr/share/themes -type d -name 'gtk-3.0' | awk -F'/' '{print $5}'i geditdo celów demonstracyjnych? Np GTK_THEME="HighContrast" geditalbo env GTK_THEME="HighContrast" geditalbo GTK_THEME=Adwaita:dark gedit... nic.
Redsandro
Właśnie to zmieniłem /usr/share/applications/<appname>.desktopi zadziałało dla mnie.
Drew Chapin,
Jakiś sposób to zrobić z kodu w aplikacji?
Anony-Mousse,
1
Warto zauważyć, że w nazwach motywów rozróżniana jest wielkość liter.
Cedric Reichenbach,
Działa to w przypadku niektórych aplikacji, ale nie dla wszystkich.
10

Pytanie jest nadal aktualne i znalazłem sposób:

  • utwórz dowolny folder path/to/MY_FOLDER
  • utwórz /share/themes/folder w nim (to znaczy path/to/MY_FOLDER/share/themes).
  • umieść w nim dowolny motyw GTK3
  • zmień nazwę motywu na nazwę AKTUALNIE AKTYWNEGO TEMATU.

    W końcu to polecenie sprawi, że aplikacja będzie używać motywu o zmienionej nazwie zamiast obecnie aktywnego:

GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATON

(Ścieżka później GTK_DATA_PREFIX=musi być ( i tylko taka ) do folderu zawierającego /share/themes/RENAMED_THEME . Dlatego NIE jest path/to/MY_FOLDER/share/themes/RENAMED_THEME , ale tylko path/to/MY_FOLDER.)

Aby mieć to w programie uruchamiającym, zamień odpowiednio:

Exec=sh -c 'GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATION'
Tsu Jan
źródło
1
Teraz działa to nawet z Eclipse, w przeciwieństwie do innych odpowiedzi, które próbowałem.
Ruslan,
2
którego pliku / folderu dokładnie używamy GTK_DATA_PREFIX?
runDOSrun
1
To było dość mylące, ale wymyśliłem to i zredagowałem odpowiedź.
Innym sposobem jest umieszczenie motywu o zmienionej nazwie specyficznej dla aplikacji ~/.themes(musi być obecny aktywny /usr/share/themes), a następnie użycie ścieżki GTK_DATA_PREFIX=path/to/nowhere do uruchomienia tej aplikacji, która zresetuje motyw aplikacji do bieżącej, tylko że najpierw zajrzy ~/.themesi weźmie ten o tej samej nazwie.
1
@runDOSrun - późniejsza ścieżka GTK_DATA_PREFIX=musi być ( i tylko ta ) do folderu zawierającego /share/themes/RENAMED_THEME . Dlatego NIE jest FOLDER/share/themes/RENAMED_THEME , ale po prostu FOLDER.
8

Z pewnością jest to możliwe, nie mam dużego doświadczenia w tworzeniu motywów, ale kiedy przejdziesz do /usr/share/themes/*Theme Name*/gtk-3.0/apps/katalogu, znajdziesz .csspliki nazwane aplikacjami, których dotyczą motywy, więc tak, możesz tworzyć motywy specyficzne dla aplikacji.

Zwróć uwagę, że sposób, w jaki wspomniałeś motywowanie aplikacji, może wymagać pewnej pracy (na przykład jednoczesnej pracy z Ambiance i Elementary, ponieważ każdy motyw ma plik podstawowy, na którym wykonywana jest stylizacja aplikacji) (plik gtkrcw Gtk 2.0 podczas gdy plik gtk.cssw przypadku Gtk3.0 ).

A ten plik motywu podstawowego zawiera reguły stylizacji, które są konkretnie ukierunkowane na dany motyw, dlatego nie można tworzyć wyglądu podstawowego z pliku motywu podstawowego Ambiance bez wprowadzania poważnych zmian, a nawet jeśli to zrobisz, stracisz wygląd samego Ambiance.

Ponadto w GNOME możliwe jest jednoczesne stosowanie tylko jednego motywu. Na przykład, jeśli używałeś okna Wygląd w Ubuntu 12.04, wiesz, że możesz wybrać dowolny pojedynczy motyw z menu rozwijanego, jeśli go użyłeś gnome-tweak-tool, niż możesz ustawić różne motywy dla Gtk, ramek okien i ikon, ale nadal nie pozwala on kierować określonych aplikacji do motywu, tak jak powiedziałem wcześniej, możesz ustawić zupełnie różne motywy dla różnych aplikacji, jeśli sprytnie pracujesz z podstawowy plik motywu, jak na razie, aplikacje innych firm nie mogą tego zrobić samodzielnie.

Jednym ze sposobów, w jaki możesz to zrobić samemu, jest to, że podstawowy plik motywu ( gtk.css) ma tylko podstawowe zasady, które są neutralne dla każdego motywu, ciemne lub jasne. Miej też faktyczny projekt motywu zapisany w plikach specyficznych dla aplikacji, które znajdują się w wyżej wymienionym katalogu, tj. Do stylizacji Nautilus, możesz zapisać wszystkie wymagane właściwości w nautilus.csspliku. To samo z każdą aplikacją, na którą chcesz kierować reklamy. Oczywiście, zrobienie tego wymaga przyzwoitego doświadczenia w temacie Gtk.

Można odnieść to do tworzenia własnego motywu przy użyciu szablonu, również istnieje spora dokumentacja na GTK + themeing.

Kushal
źródło
7
Nie chcę tworzyć nowego motywu, chcę przypisać istniejący.
neonboy
@neonboy: Jak powiedziałem, że w GTK3 nie jest to takie proste, motyw jest dystrybuowany do wielu plików, a jeśli zależności nie są spełnione, zepsuty motyw to wszystko, co dostaniesz. Dlatego zamieściłem odpowiedź, która pokazuje możliwe rozwiązanie z GTK3, a nie GTK2 (w którym robienie tego jest znacznie łatwiejsze).
Kushal
5

Tak, prostym sposobem jest skierowanie aplikacji na wymaganą ścieżkę, w której znajduje się plik rc, w poleceniu uruchamiającym aplikację:

GTK2_RC_FILES=/usr/share/themes/Redmond/gtk-2.0/gtkrc inkscape

To w dniu 12.04 dla inkscape (który wciąż jest Gnome2 btw) wytwarza to:

okno inkscape z motywem Windows

Zobacz więcej informacji o działającym motywie Gtk2 tutaj .

Martin Owens -doctormo-
źródło
7
Pytanie dotyczy Gtk3, a nie Gtk2, dzięki.
neonboy
Nie podałeś tego w swoim pierwotnym pytaniu. Proszę, nie antagonizujcie poszukiwaczy.
Martin Owens -doctormo-
5
Pierwotnie brzmiał: „Czy mogę używać różnych motywów GTK3 dla poszczególnych aplikacji?” który wciąż miał temat Gtk3 w pytaniu, a następnie wolność foss poprosić mnie o skomentowanie nieważnych odpowiedzi i edytowanie pytania, jeśli to konieczne, nie antagonizuję nikogo.
neonboy
1

Tak, możesz, tak naprawdę googlowałem i otrzymałem kilka odpowiedzi:

  1. Znajdź dokładny plik wykonywalny programu, w którym chcesz zmienić motyw. Na przykład, jeśli chcesz to dla biura, wpisz which oofficeterminal.
  2. Poszukaj folderu bin, w którym wszystkie aplikacje umieszczają swoje binarne pliki wykonywalne. Wpisz echo $PATHterminal, a uzyskasz ścieżkę. Zalecam utworzenie folderu bin w katalogu domowym przez wpisaniemkdir ~/bin
  3. Wpisz, gedit ~/.bashrcaby otworzyć plik bash rc.
  4. Idź na dół tego pliku i dodaj ten wiersz export PATH=~/bin:${PATH}

Teraz stworzymy skrypt, który uruchomi Twój program z niestandardowym motywem:

  1. Utwórz plik skryptu aplikacji, wpisując: gedit ~/bin/ooffice
  2. Wpisz następujące wiersze w otwartym pliku:

    #!/bin/bash
    env GTK2_RC_FILES=/usr/share/themes/SlicknessX/gtk-2.0/gtkrc /usr/bin/ooffice "$@"
    
  3. Zmień tryb pliku wykonywalnego do typowania przez: chmod +x ~/bin/ooffice.

Mam nadzieję, że to pomaga, musisz pamiętać tylko jedną rzecz, format skryptu, jak pokazano poniżej:

#!/bin/bash
env GTK2_RC_FILES=PATH_TO_GTKRC PATH_TO_EXECUTABLE "$@"
Ravi Raj
źródło
Z pewnością jest to możliwe dla aplikacji GTK2 korzystających z GTK2_RC_FILES env. zmienna. Jakie motywy mówisz o kompilacji? Pytanie dotyczy systemowych motywów GTK dostępnych w Ubuntu.
ish
1
Wierzę, że metoda, o której wspomniałeś, jest przeznaczona dla Gtk2.0, podczas gdy Ubuntu 12.04 używa Gtk3.0 do kompozycji, więc jeśli nie będzie działać.
Kushal
6
Przepraszam, to rozwiązanie dla Gtk2, pytanie dotyczy Gtk3.
neonboy