Как сделать изменения GTK Inspector постоянными?

«Новый» текстовый редактор в Ubuntu 22.10 имеет большое верхнее поле в области редактирования, как показано ниже:

Сегодня я наткнулся на GTK Inspector , который можно активировать из текстового редактора , нажав Ctrl+Shift+I(заглавнаяi). После перехода в «Объекты»«Свойства» и изменения значения верхнего поля с 12 на 2 этот размер верхнего поля уменьшается до более значимого значения:

Однако это изменение настройки не является постоянным; после закрытия и перезапускаgnome-text-editorэтот размер возвращается к старому значению (12).

Есть ли способ сделать изменение постоянным? Я думаю, некоторые модификации в~/.config/gtk-4.0/gtk.cssнеобходим; однако GTK Inspector мне в этом не помогает.

2 ответа

AFAIK, это «свойство» виджета GTK.

Вариант 1. Если графический интерфейс является декларативным в виде текста

  • Его можно изменить в пакете времени выполнения только в следующих случаях:

    1. Приложение, использующее GTK Builder и графический интерфейс, загружается из XML во время выполнения.
    2. Приложение, основанное на скрипте (например, Python).

    В противном случае нет другого способа, кроме изменения самого исходного кода, поскольку приложение не использует сборщик GTK, оно основано на скомпилированном языке программирования. Графический интерфейс встроен в двоичный формат внутри исполняемого файла или его общей библиотеки.

  • «Свойство» виджета GTK отличается от стиля CSS. Я проверил это:padding-topиmargin-topони не одинаковы и просто добавляют больше места. Даже переход вниз по иерархии не имеет никакого эффекта, я подозреваю, что он обновляется/переопределяется программой во время выполнения.

    В любом случае, вот что я попробовал в первую очередь отладить и отследить, возможно, я что-то пропустил:

            .editor.GtkSourceView.monospace.sourceview.view {
      border-style: solid;
      border-top-width: 3px;
      border-top-color: rgb(0,255,0);
      border-left-width: 2px;
      border-left-color: rgb(0,255,255);
      background-color: rgb(255,0,0);
      margin-top: 100px;
      padding-top: 50px;
    }
    
    .editor.GtkSourceView.monospace.sourceview.view > text {
      border-style: solid;
      border-top-width: 5px;
      border-top-color: rgb(255,255,0);
      border-left-width: 3px;
      border-left-color: rgb(0,255,255);
    
      /* not effective ??? */
      background-color: rgb(0,0,200);
      margin-top: 10px;
      padding-top: 100px;
      margin: 50px;
      padding: 30px;
    }  
    

    Снимок экрана: пробная настройка CSS инспектора GTK в текстовом редакторе gnome

    Обновление: метод проб и ошибок, отрицательное значение работает хорошо ‼️

             .editor.GtkSourceView.monospace.sourceview.view {
      margin-top: -12px;
    }
    

    Примечание. Если вам интересно, где находится "editor GtkSourceView monospace sourceview view«Появляется селектор CSS, проверьте: GTK Inspector > Объекты > Использовать инструмент выбора > Узлы CSS > Классы стилей.

Вариант 2. Измените исходный код, необходимы знания процесса сборки.

  • Если вы решите модифицировать исходный код, я ожидаю, что это то, что вы ищете:

    https://gitlab.gnome.org/GNOME/gnome-text-editor/-/blob/main/src/editor-page.ui#L30

            ...
    <object class="GtkScrolledWindow" id="scroller">
      <property name="hexpand">true</property>
      <property name="vexpand">true</property>
      <child>
        <object class="EditorSourceView" id="view">
          <style>
            <class name="editor"/>
          </style>
          <signal name="notify::font-scale" handler="font_scale_changed_cb" swapped="true"/>
          <property name="auto-indent">true</property>
          <property name="top-margin">12</property>
    ...
    

Вариант 3. Просто хак, измените текстовые ресурсы внутри двоичного файла.

  • Ну, это всего лишь ярлык/хак. Я бы не рекомендовал его в мире «свободного программного обеспечения», где исходный код открыт и бесплатен.

    1. Установите bless или любой другой шестнадцатеричный редактор.

    2. Сделать копию исполняемого файла

                ## Check for file path
      which gnome-text-editor
      
      /usr/bin/gnome-text-editor
      
      ## Confirm not just a proxy/wrapper script
      file /usr/bin/gnome-text-editor
      
      /usr/bin/gnome-text-editor: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b2b5986d56418c22adb1e35431cb650c259bba7c, for GNU/Linux 3.2.0, stripped
      
      ## Copy and make a backup
      cp /usr/bin/gnome-text-editor ./Desktop/gnome-text-editor.mod
      cp /usr/bin/gnome-text-editor /usr/bin/gnome-text-editor.backup
      
    3. Открыть./Desktop/gnome-text-editor.modсbless. Найдите «верхнее поле». Вы можете найти 4 объекта, соответствующих объекту «редактор», который является нашей целью. У меня в Ubuntu 23.10 смещение около 405506 (десятичное). Измените значение «12» на желаемое значение, но оставьте его двухзначным (ноль означает «00»).

    4. Проверьте это, затем скопируйте обратно

                ./Desktop/gnome-text-editor.mod
      sudo cp ./Desktop/gnome-text-editor.mod ./Desktop/gnome-text-editor
      

    Модификация скриншота в шестнадцатеричном редакторе bless

    Скриншот полученного текстового редактора gnome с верхним полем, установленным на 0 пикселей.

    Это может быть перезаписано любым будущим обновлением. Вам решать, хотите ли вы предотвратить это, заблокировав обновление пакета в APT или DPKG.

Инспектор GTK поможет, вам нужно будет выбрать вкладку «CSS Nodes», чтобы узнать, что изменить. Эта вкладка покажет вам, какой узел CSS был изменен. Подход к изменению вашего «локального CSS GTK4» правильный, в противном случае его изменение в вашей теме продлится только до следующего обновления. Пример с gnome-калькулятором (у меня не установлен gedit):

      GTK_DEBUG=interactive gnome-calculator

Откроется два окна: одно — калькулятор, другое — «отладчик». Давайте проверим красную кнопку отмены:

Нажмите кнопку «Выбрать объект» и щелкните элемент управления, который вы хотите проверить — отладчик исчезнет и отобразит свойства. Измените на «Узлы CSS»:

Кнопка «C» имеет стиль «кнопка очистки» или «текстовая кнопка». На первом этапе вы можете попытаться что-то изменить, используя вкладку CSS, которая является игровой площадкой:

      button.clear-button label {color:yellow;}

и убедитесь, что CSS включен:

Итак, вы изменили цвет кнопки — например. Чтобы сохранить его, вам придется записать эту строку в файл: либо в

  • ~/.config/gtk-3.0/gtk.css
  • ~/.config/gtk-4.0/gtk.css

в зависимости от того, используется ли приложением GTK4.0 или GTK3.0

Это утомительная работа, но таким образом мне удалось создать свою собственную тему, поскольку CSS на самом деле не документирован.

Другие вопросы по тегам