Как сделать изменения 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. Если графический интерфейс является декларативным в виде текста
Его можно изменить в пакете времени выполнения только в следующих случаях:
- Приложение, использующее GTK Builder и графический интерфейс, загружается из XML во время выполнения.
- Приложение, основанное на скрипте (например, 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. Просто хак, измените текстовые ресурсы внутри двоичного файла.
Ну, это всего лишь ярлык/хак. Я бы не рекомендовал его в мире «свободного программного обеспечения», где исходный код открыт и бесплатен.
Установите bless или любой другой шестнадцатеричный редактор.
Сделать копию исполняемого файла
## 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
Открыть
./Desktop/gnome-text-editor.mod
сbless
. Найдите «верхнее поле». Вы можете найти 4 объекта, соответствующих объекту «редактор», который является нашей целью. У меня в Ubuntu 23.10 смещение около 405506 (десятичное). Измените значение «12» на желаемое значение, но оставьте его двухзначным (ноль означает «00»).Проверьте это, затем скопируйте обратно
./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;}
Итак, вы изменили цвет кнопки — например. Чтобы сохранить его, вам придется записать эту строку в файл: либо в
- ~/.config/gtk-3.0/gtk.css
- ~/.config/gtk-4.0/gtk.css
в зависимости от того, используется ли приложением GTK4.0 или GTK3.0
Это утомительная работа, но таким образом мне удалось создать свою собственную тему, поскольку CSS на самом деле не документирован.