Могу ли я применить другую тему GTK3 из основной для отдельного приложения?

46

Например, могу ли я оставить Ambiance в качестве основной темы, но назначить элементарную тему приложению элементарного?

Росси
источник
8
Текущие ответы о Gtk2, я спрашиваю о Gtk3.
neonboy
Я отредактировал вопрос, чтобы лучше отразить то, что вы ищете. Просим прощения, но короткий ответ от моего исследования нет , вы не можете без необходимости тратить некоторое усилие создать новый «гибрид» тему , как описано @Kush :( Это не так просто , как GTK2 больше.
иш

Ответы:

32

Вы можете использовать переменную среды GTK GTK_THEME=elementaryдля запуска приложения с элементарной темой. Например, при запуске GTK_THEME=elementary pantheon-filesбудет запущено элементарное приложение Files с использованием элементарной темы GTK.

Чтобы применить его каждый раз, когда вы запускаете определенное приложение, ваш лучший вариант - создать собственный файл .desktop (модуль запуска).

Создайте собственный файл .desktop

  1. Откройте браузер файлов
  2. Перейдите к /usr/share/applications/
  3. Скопируйте панель запуска (выделите и Ctrl + C) для приложения, которое вы хотите запустить с элементарной темой
  4. Найдите ~/.local/share/applications/и вставьте панель запуска (Ctrl + V)
  5. Щелкните правой кнопкой мыши и откройте панель запуска с помощью текстового редактора
  6. Измените строку, начиная с Exec=включения, Exec=env GTK_THEME=elementaryа затем предыдущего существующего содержимого строки. (Так Exec=pantheon-filesбы и стало Exec=env GTK_THEME=elementary pantheon-files)
  7. Сохраните и закройте файл

В следующий раз, когда вы запустите приложение из Unity (или по вашему выбору), оно будет использовать элементарную тему.

Бонус: заставить работать при использовании командной строки

Вы также можете захотеть, чтобы приложение запускалось с элементарной темой при запуске из командной строки. Для этого:

  1. Откройте приложение терминала
  2. Тип alias pantheon-files="GTK_THEME=elementary pantheon-files"(замена pantheon-filesнужным приложением)
  3. нажмите Ввод

Предостережения:

  1. Это не изменит тему вашего оконного менеджера на элементарную тему.
  2. Это (преднамеренно) будет применяться только к вашей учетной записи, а не к root или кому-либо еще на машине.
  3. Имена тем являются cAsE-sEnsItiVe и должны соответствовать имени папки темы.

Источники:

  1. Я элементарный вкладчик;)
  2. GTK + 3 Справочное руководство: Запуск приложений GTK +
  3. Установить переменную в файле .desktop
Кэссиди Джеймс
источник
Хороший ответ, но я не могу заставить это работать для любой темы. Можете ли вы привести пример с использованием терминала find /usr/share/themes -type d -name 'gtk-3.0' | awk -F'/' '{print $5}'и geditв демонстрационных целях? Например, GTK_THEME="HighContrast" geditили env GTK_THEME="HighContrast" geditили GTK_THEME=Adwaita:dark gedit... ничего.
Редсандро
Я просто изменил это, /usr/share/applications/<appname>.desktopи это сработало для меня.
Дрю Чапин
Есть ли способ сделать это из кода внутри приложения?
Anony-Mousse
1
Стоит отметить, что названия тем чувствительны к регистру.
Седрик Райхенбах
Это работает для некоторых приложений, но не для всех.
10

Вопрос все еще актуален и я нашел способ:

  • создать любую папку path/to/MY_FOLDER
  • создать /share/themes/папку внутри него (то есть path/to/MY_FOLDER/share/themes).
  • поместите любую тему GTK3 в последнюю
  • переименуйте тему в название ТЕКУЩЕЙ АКТИВНОЙ ТЕМЫ.

    Наконец, эта команда заставит приложение использовать переименованную тему вместо текущей:

GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATON

(Путь после GTK_DATA_PREFIX=должен быть тем ( и только этим ) к папке, которая содержит /share/themes/RENAMED_THEME . Вот почему это НЕ path/to/MY_FOLDER/share/themes/RENAMED_THEME , а просто path/to/MY_FOLDER.)

Чтобы иметь это внутри лаунчера, замените соответственно:

Exec=sh -c 'GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATION'
Цу Ян
источник
1
Теперь это на самом деле работает даже с Eclipse, в отличие от других ответов, которые я пробовал.
Руслан
2
какой файл / папка мы точно указываем GTK_DATA_PREFIX?
запустить DOSrun
1
Это было довольно странно, но я понял это и отредактировал ответ.
Другой способ - поместить переименованную тему для конкретного приложения ~/.themes(должен быть текущий активный /usr/share/themes), а затем использовать какой-либо путь GTK_DATA_PREFIX=path/to/nowhere для запуска этого приложения, что приведет к сбросу темы приложения на текущую, только она будет сначала отображаться ~/.themesи принимать тот с тем же именем там.
1
@runDOSrun - путь после GTK_DATA_PREFIX=должен быть тем ( и только этим ) к папке, которая содержит /share/themes/RENAMED_THEME . Вот почему это не так FOLDER/share/themes/RENAMED_THEME , а просто FOLDER.
8

Это, конечно, возможно, у меня нет особого опыта в создании тем, но когда вы перейдете к /usr/share/themes/*Theme Name*/gtk-3.0/apps/каталогу, вы найдете .cssфайлы, названные по именам приложений, для которых они нацелены на тему, так что да, вы можете создавать темы для конкретных приложений.

Обратите внимание, что способ, которым вы упомянули тему своих приложений, может потребовать некоторой работы (например, одновременной работы Ambiance и Elementary, поскольку у каждой темы есть базовый файл, поверх которого выполняется стили, специфичные для приложения (файл gtkrcв Gtk 2.0). время, файл gtk.cssв случае Gtk3.0 ).

И этот базовый файл темы содержит правила стиля, специально предназначенные для данной темы, поэтому вы не можете создать элементарный стиль и внешний вид из файла базовой темы Ambiance без внесения каких-либо серьезных изменений, и даже если вы это сделаете, вы потеряете внешний вид Ambiance.

Кроме того, в GNOME можно применять только одну тему за раз. Например, если вы использовали окно «Внешний вид» в Ubuntu 12.04, вы знаете, что можете выбрать любую отдельную тему из выпадающего списка, если вы ее использовали gnome-tweak-tool, чем Вы можете установить разные темы для Gtk, оконных рам и значков, но, тем не менее, он не позволяет нацеливать конкретные приложения на темы, поэтому, как я уже говорил ранее, вы можете установить совершенно разные темы для разных приложений, если вы умно работаете с Базовый файл темы, на данный момент никакие сторонние приложения не могут сделать это самостоятельно.

Один из способов сделать это самостоятельно - позволить файлу базовой темы ( gtk.css) иметь только основные правила, которые нейтральны для любой темы, будь то темная или светлая. И фактический дизайн темы написан в специфичных для приложения файлах, которые находятся в вышеупомянутом каталоге, то есть для стилизации Nautilus вы можете записать все необходимые свойства в nautilus.cssфайл. То же самое с каждым приложением, которое вы хотите настроить. Очевидно, что для того, чтобы сделать это, требуется некоторый приличный опыт работы с Gtk.

Вы можете сослаться на это для создания собственной темы с помощью шаблона. Также есть хорошая документация по тематике Gtk +.

Kushal
источник
7
Я не хочу создавать новую тему, я хочу назначить существующую.
neonboy
@neonboy: Как я уже говорил, с GTK3 все не так просто, тема распределяется по нескольким файлам, и если зависимости не удовлетворяются, ломаная тема - это все, что вы получите. Вот почему я опубликовал ответ, который показывает возможное решение с GTK3, а не с GTK2 (в котором сделать это довольно просто).
Кушал
6

Да, простой способ - указать приложению требуемый путь к файлу rc в команде, которая запускает ваше приложение:

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

Это 12.04 для Inkscape (который все еще Gnome2, кстати) производит это:

окно Inkscape с темой Windows

Более подробную информацию о теме Gtk2 можно найти здесь .

Мартин Оуэнс -доктормо-
источник
7
Вопрос о Gtk3, а не Gtk2, спасибо.
neonboy
Вы не указали это в своем первоначальном вопросе. Пожалуйста, не противодействуйте спрашивающим.
Мартин Оуэнс -доктормо-
5
Первоначально было «Могу ли я использовать разные темы GTK3 для отдельных приложений?» У которого все еще была тема Gtk3 в вопросе, затем я могу попросить меня прокомментировать неправильные ответы и отредактировать вопрос, если это необходимо, я никого не противодействую.
neonboy
1

Да, вы можете, на самом деле я погуглил и получил несколько ответов:

  1. Ищите точный исполняемый файл для программы, которую вы хотите изменить тему. Например, если вы хотите это для офиса, то введите which oofficeв терминале.
  2. Найдите папку bin, в которую все приложения помещают свои двоичные исполняемые файлы. Введите echo $PATHв терминале, и вы получите путь. Я рекомендую вам создать папку bin в вашем домашнем каталоге, набравmkdir ~/bin
  3. Введите, gedit ~/.bashrcчтобы открыть файл bash rc.
  4. Перейти в конец этого файла и добавить эту строку export PATH=~/bin:${PATH}

Теперь мы создадим скрипт, который выполнит вашу программу с пользовательской темой:

  1. Создайте файл сценария приложения, набрав: gedit ~/bin/ooffice
  2. Введите эти строки в открытом файле:

    #!/bin/bash
    env GTK2_RC_FILES=/usr/share/themes/SlicknessX/gtk-2.0/gtkrc /usr/bin/ooffice "$@"
    
  3. Изменение режима файла , исполняемая команда: chmod +x ~/bin/ooffice.

Надеюсь, это поможет, вам нужно запомнить только одну вещь, формат скрипта, как показано ниже:

#!/bin/bash
env GTK2_RC_FILES=PATH_TO_GTKRC PATH_TO_EXECUTABLE "$@"
Рави Радж
источник
Это конечно возможно для приложений GTK2, использующих env GTK2_RC_FILES. переменная. Кроме того, какие темы вы говорите о компиляции? Вопрос касается общесистемных тем GTK, доступных в Ubuntu.
иш
1
Я полагаю, что метод, который вы упомянули, нацелен на Gtk2.0, в то время как Ubuntu 12.04 использует Gtk3.0 для тем, так что если он может не работать.
Кушал
6
Извините, это решение для Gtk2, вопрос о Gtk3.
neonboy