Bisakah saya menerapkan tema GTK3 yang berbeda dari yang utama ke satu aplikasi?


46

Misalnya, dapatkah saya menjadikan Ambiance sebagai tema utama tetapi menetapkan tema dasar ke aplikasi SD?


8
Jawaban terkini ara tentang Gtk2, saya bertanya tentang Gtk3.
neonboy

Saya mengedit pertanyaan untuk lebih mencerminkan apa yang Anda cari. Maaf, tetapi jawaban singkat dari penelitian saya adalah tidak , Anda tidak bisa tanpa harus menghabiskan usaha membuat tema "hibrid" baru seperti yang dijelaskan @Kush :( Tidak lagi sesederhana GTK2 lagi.
ish

Jawaban:


32

Anda dapat menggunakan variabel lingkungan GTK GTK_THEME=elementaryuntuk meluncurkan aplikasi dengan tema dasar. Misalnya, menjalankan GTK_THEME=elementary pantheon-filesakan meluncurkan aplikasi File dasar menggunakan tema SD GTK.

Untuk menerapkan ini setiap kali Anda meluncurkan aplikasi tertentu, opsi terbaik Anda kemungkinan akan membuat file .desktop (peluncur) khusus.

Buat file .desktop kustom

  1. Buka browser file Anda
  2. Navigasi ke /usr/share/applications/
  3. Salin peluncur (sorot dan Ctrl + C) untuk aplikasi yang ingin Anda luncurkan dengan tema dasar
  4. Navigasikan ke ~/.local/share/applications/dan tempel peluncur (Ctrl + V)
  5. Klik kanan dan buka peluncur dengan editor teks
  6. Ubah baris yang dimulai dengan Exec=untuk memasukkan Exec=env GTK_THEME=elementarydan kemudian isi baris yang ada sebelumnya. (Jadi Exec=pantheon-filesakan menjadi Exec=env GTK_THEME=elementary pantheon-files)
  7. Simpan dan tutup file

Lain kali Anda meluncurkan aplikasi dari Unity (atau peluncur aplikasi pilihan Anda) itu akan menggunakan tema dasar.

Bonus: membuatnya berfungsi saat menggunakan baris perintah

Anda mungkin juga ingin aplikasi untuk memulai dengan tema dasar ketika meluncurkannya dari baris perintah. Untuk melakukannya:

  1. Buka aplikasi Terminal Anda
  2. Ketik alias pantheon-files="GTK_THEME=elementary pantheon-files"(ganti pantheon-filesdengan aplikasi yang diinginkan)
  3. tekan enter

Peringatan:

  1. Ini tidak akan mengubah tema manajer jendela Anda ke tema dasar.
  2. Ini (berdasarkan desain) hanya akan berlaku untuk akun Anda, bukan root atau siapa pun di mesin.
  3. Nama tema adalah cAsE-sEnsItiVe dan harus dicocokkan dengan nama folder tema.

Sumber:

  1. Saya seorang kontributor dasar;)
  2. Manual Referensi GTK + 3: Menjalankan Aplikasi GTK +
  3. Setel variabel dalam file .desktop

Jawaban yang bagus tapi saya tidak bisa mendapatkan ini berfungsi untuk tema apa pun. Bisakah Anda memberi contoh menggunakan terminal, find /usr/share/themes -type d -name 'gtk-3.0' | awk -F'/' '{print $5}'dan gedituntuk tujuan demonstrasi? Misal GTK_THEME="HighContrast" geditatau env GTK_THEME="HighContrast" geditatau GTK_THEME=Adwaita:dark gedittidak sama sekali.
Redsandro

Saya baru saja mengubahnya /usr/share/applications/<appname>.desktopdan itu berhasil untuk saya.
Drew Chapin

Adakah cara untuk melakukan ini dari kode di dalam aplikasi?
Anony-Mousse

1
Perlu dicatat bahwa nama tema peka terhadap huruf besar-kecil.
Cedric Reichenbach

Ini berfungsi untuk beberapa aplikasi tetapi tidak untuk semua.

10

Pertanyaannya masih valid dan saya menemukan cara:

  • buat folder apa saja path/to/MY_FOLDER
  • buat /share/themes/folder di dalamnya (yaitu path/to/MY_FOLDER/share/themes).
  • letakkan tema GTK3 di dalam yang terakhir
  • ubah nama tema menjadi nama TEMA AKTIF SAAT INI.

    Akhirnya, perintah ini akan membuat aplikasi menggunakan tema yang diganti nama bukan yang sedang aktif:

GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATON

(Path after GTK_DATA_PREFIX=harus seperti itu ( dan hanya itu ) ke folder yang berisi /share/themes/RENAMED_THEME . Itu sebabnya BUKAN path/to/MY_FOLDER/share/themes/RENAMED_THEME , tapi adil path/to/MY_FOLDER.)

Untuk memilikinya di dalam peluncur, ganti yang sesuai:

Exec=sh -c 'GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATION'

1
Sekarang ini benar-benar berfungsi bahkan dengan Eclipse, tidak seperti jawaban lain yang saya coba.
Ruslan

2
file / folder mana yang tepat kita tunjuk untuk digunakan GTK_DATA_PREFIX?
runDOSrun

1
Ini agak membingungkan, tetapi saya telah menemukan jawabannya dan mengedit jawabannya.

Cara lain adalah dengan memasukkan tema berganti nama khusus aplikasi ke dalam ~/.themes(aktif saat ini harus dalam /usr/share/themes) dan kemudian menggunakan beberapa jalur GTK_DATA_PREFIX=path/to/nowhere untuk meluncurkan aplikasi itu, yang akan mengatur ulang tema aplikasi ke yang saat ini, hanya itu akan terlihat pertama masuk ~/.themesdan mengambil satu dengan nama yang sama di sana.

1
@runDOSrun - path setelahnya GTK_DATA_PREFIX=harus berupa ( dan hanya itu ) ke folder yang berisi /share/themes/RENAMED_THEME . Itu sebabnya BUKAN FOLDER/share/themes/RENAMED_THEME , tapi adil FOLDER.

8

Tentunya mungkin, saya tidak memiliki banyak pengalaman tema, tetapi ketika Anda menavigasi ke /usr/share/themes/*Theme Name*/gtk-3.0/apps/direktori, Anda akan menemukan .cssfile, dinamai dengan aplikasi yang ditargetkan untuk tema, jadi ya Anda dapat membuat Tema khusus aplikasi.

Perhatikan bahwa cara yang Anda sebutkan untuk tema aplikasi Anda mungkin memerlukan beberapa pekerjaan yang harus dilakukan (seperti memiliki Ambiance dan Elementary bekerja secara bersamaan, karena setiap tema memiliki file dasar di atas yang mana styling khusus aplikasi dilakukan, (file gtkrcdalam Gtk 2.0 sementara, file gtk.cssdalam kasus Gtk3.0 ).

Dan file tema dasar ini berisi aturan gaya yang secara khusus menargetkan tema yang diberikan, maka Anda tidak dapat membuat tampilan dan nuansa Elementary dari file tema dasar Ambiance tanpa membuat beberapa perubahan berat, dan bahkan jika Anda melakukannya, Anda akan kehilangan Ambiance terlihat dengan sendirinya.

Juga, di GNOME, dimungkinkan untuk hanya menerapkan satu tema pada satu waktu, Sebagai contoh, jika Anda telah menggunakan jendela Appearance di Ubuntu 12.04, Anda tahu dapat memilih satu tema dari dropdown, jika Anda telah menggunakan gnome-tweak-tool, daripada Anda dapat mengatur tema yang berbeda, untuk Gtk, Bingkai jendela, dan ikon, tetapi tetap saja, itu tidak memungkinkan untuk menargetkan aplikasi tertentu ke tema, jadi seperti yang saya katakan sebelumnya, Anda dapat mengatur tema yang sama sekali berbeda untuk aplikasi yang berbeda jika Anda bekerja dengan cerdik dengan file tema dasar, sampai sekarang, tidak ada aplikasi pihak ketiga yang dapat melakukannya dengan sendirinya.

Salah satu cara Anda dapat melakukannya sendiri adalah, biarkan file tema dasar ( gtk.css) hanya memiliki aturan penting yang netral untuk tema apa pun, menjadi gelap atau terang. Dan memiliki desain tema aktual yang ditulis dalam file khusus aplikasi yang berada di direktori yang disebutkan di atas, yaitu untuk menata Nautilus, Anda dapat menulis semua properti yang diperlukan dalam nautilus.cssfile. Sama dengan setiap aplikasi yang ingin Anda targetkan. Jelas, melakukan hal tersebut membutuhkan pengalaman tema Gtk yang layak.

Anda dapat merujuk ini untuk membuat tema Anda sendiri menggunakan template, Juga ada dokumentasi yang layak tentang tema Gtk +.


7
Saya tidak ingin membuat tema baru, saya ingin menetapkan yang sudah ada.
neonboy

@neonboy: Seperti yang saya katakan bahwa dengan GTK3, tidak sesederhana itu, sebuah tema didistribusikan ke beberapa file, dan jika dependensi tidak terpenuhi, hanya tema yang rusak yang akan Anda dapatkan. Itu sebabnya saya memposting jawaban yang menunjukkan kemungkinan solusi dengan GTK3, dan bukan GTK2 (di mana melakukan ini cukup mudah).
Kushal

6

Ya, cara sederhananya adalah dengan mengarahkan aplikasi ke jalur yang diperlukan tempat file rc Anda berada, dalam perintah yang menjalankan aplikasi Anda:

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

Ini pada 12,04 untuk inkscape (yang masih Gnome2 btw) menghasilkan ini:

jendela inkscape dengan tema windows

Lihat informasi lebih lanjut tentang tema Gtk2 yang berjalan di sini .


7
Pertanyaannya adalah tentang Gtk3 bukan Gtk2, terima kasih.
neonboy

Anda tidak menentukannya di pertanyaan awal Anda. Harap tidak memusuhi para penanya.
Martin Owens -doctormo-

5
Awalnya itu adalah "Bisakah saya menggunakan tema GTK3 berbeda untuk aplikasi individual?" yang masih memiliki subjek Gtk3 dalam pertanyaan, kemudian kebebasan fosil meminta saya untuk mengomentari jawaban yang tidak valid dan mengedit pertanyaan jika perlu, saya tidak memusuhi siapa pun.
neonboy

1

Ya Anda bisa, sebenarnya saya mencari di Google dan mendapat beberapa jawaban:

  1. Cari executable yang tepat untuk program yang ingin Anda ubah temanya. Misalnya, jika Anda menginginkannya untuk kantor, ketikkan which oofficeterminal.
  2. Cari folder bin tempat semua aplikasi meletakkan executable biner mereka. Ketik echo $PATHterminal dan Anda akan menemukan jalurnya. Saya sarankan Anda untuk membuat folder bin di direktori home Anda dengan mengetikmkdir ~/bin
  3. Ketik gedit ~/.bashrcuntuk membuka file bash rc Anda.
  4. Buka bagian bawah file ini dan tambahkan baris ini export PATH=~/bin:${PATH}

Sekarang kita akan membuat skrip yang akan menjalankan program Anda dengan tema khusus:

  1. Buat file skrip aplikasi dengan mengetik: gedit ~/bin/ooffice
  2. Ketik baris ini di file yang dibuka:

    #!/bin/bash
    env GTK2_RC_FILES=/usr/share/themes/SlicknessX/gtk-2.0/gtkrc /usr/bin/ooffice "$@"
    
  3. Mengubah modus file ke executable dengan mengetik: chmod +x ~/bin/ooffice.

Semoga ini bisa membantu, Anda harus mengingat hanya satu hal, format skrip seperti yang ditunjukkan di bawah ini:

#!/bin/bash
env GTK2_RC_FILES=PATH_TO_GTKRC PATH_TO_EXECUTABLE "$@"

Sangat mungkin untuk aplikasi GTK2 menggunakan GTK2_RC_FILES env. variabel. Juga, tema apa yang Anda bicarakan tentang kompilasi? Pertanyaannya adalah tentang tema GTK seluruh sistem yang tersedia di Ubuntu.
ish

1
Saya percaya metode yang Anda sebutkan menargetkan Gtk2.0 sementara Ubuntu 12.04 menggunakan Gtk3.0 untuk tema, jadi jika mungkin tidak berhasil.
Kushal

6
Maaf, itu solusi untuk Gtk2, pertanyaannya adalah tentang Gtk3.
neonboy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.