Операционная система Linux

         

с помощью разнообразных готовых инструментариев.


X-приложения создаются с помощью разнообразных готовых инструментариев. Большая их часть разрабатывается независимыми авторами по всему миру (это общее свойство свободного ПО, см. лекцию 18), но библиотека самого низкого уровня, "X Lib", и несколько более высокоуровневых библиотек с давних пор включаются в основной дистрибутив X11. Из них наиболее примечательна "X Toolkit" (Xt), организующая из стандартных окон X11 оконные примитивы (widgets).

Дело в том, что каждый объект X11 обладает некоторым набором свойств, вроде размера окна, цвета фона или текстового содержимого. Для удобства доступа примитивы Xt, реализованные поверх объектов Xlib, имеют собственные имена (у каждого объекта – свое) и фамилии (одинаковые у всех объектов одного класса). Более того, программа, написанная на Xt, имеет карту объектов, в которой указано, какой объект внутри какого находится, и приведены имена объектов и их классов. Посмотреть структуру запущенного X-приложения можно с помощью программы editres ("Commands/Get Tree"). Например, программа xlogo состоит из трех примитивов: xlogo (класс XLogo) и вложенных в него xlogo.xlogo (класс Logo) и shellext (неоконный, класс VendorShellExt). Мало того, свойства этих примитивов можно подменить прямо в работающей программе. Можно, например, на время работы перекрасить фон xlogo в красный цвет.

Xlib, со своей стороны, предоставляет универсальный способ хранить такие настройки в файле. Многие приложения хранят свои настройки по умолчанию в /usr/X11R6/lib/X11/app-defaults/ИмяКласса (в некоторых системах этот каталог перенесен, как ему и подобает, в /etc/X11). ИмяКласса – это имя класса самого главного окна этого приложения. Пользователь может дополнить настройки ресурсов, которые сервер накапливает при старте, при помощи команды xrdb -merge файл_настроек или переписать их заново (ключ "-load"). Приложению остается только вызвать специальную функцию Xlib, которая считывает настройку с определенным именем из таблиц сервера. Если xrdb не запускалась ни разу (в том числе и в стартовом сценарии), запрос приложения будет направлен не в таблицу сервера, а непосредственно в файл ресурсов .Xdefaults1), лежащий в домашнем каталоге. В этом случае для изменения настроек не надо запускать xrdb.

Xt добавляет в эту процедуру иерархию ресурсов. Как это можно наблюдать в editres, при задании свойства ресурса используются четыре конструкции: имя ресурса, имя класса, разделитель ".", означающий, что один ресурс непосредственно вложен в другой и разделитель "*", означающий, что ресурс в конце концов вложен в другой (возможно, по цепочке). Например, для задания цвета фона в программе xload можно использовать именование xload.paned.load.background (это все по именам). Можно попробовать единым махом изменить цвет фона всех примитивов этой программы, записав в .Xdefaults (или передав xrdb) строку вида "XLoad*background: midnightblue".

Если в .Xdefaults есть несколько строк, удовлетворяющих имени ресурса, то имена собственные имеют преимущество над классами, а "." – над "*". Так что запись вида "*Text*background: peachpuff" повлияет только на те примитивы класса Text и вложенные в них, для которых нет более строгого указания (например, "*Text.background" или "XConsole*Text*background"). Обратите внимание, как поэтично называются порой цвета в X11! Посмотреть таблицу цветов можно командой xlscolors.

К сожалению, Xt – все-таки довольно старая библиотека, не во всем следующая новым веяниям в области графического интерфейса. Для быстрой разработки оконных программ нужны разнообразные и мощные инструменты, которые манипулируют понятиями, далеко ушедшими от стандартного "окно–меню–кнопка". Если такие инструментарии написаны с применением Xt (например, Xm, open Motif, Xaw, Athena Widget), их настройки можно поселить в .Xdefaults. Проблема еще и в том, что структуру классов Xt неудобно использовать при программировании на языке C++, а именно на нем сейчас пишется большинство оконных приложений. Так что самые мощные инструментарии для X11 – Qt ("The Q Toolkit") и GTK ("The GIMP Toolkit") – не используют App-defaults.


Содержание раздела