Как делать окна, или о WindowMaker

Алексей Федорчук
2000 г

Заметка написана очень давно, но, в связи с недавней реанимацией проекта, может представлять не только исторический интерес.

Многим памятна (по крайней мере, по литературным источникам) замечательная платформа Next — детище Стива Джобса, созданное им в период отрыва от Apple с ее Macintosh’ем. Являвшее собой диалектическое единство железа (черный кубик на базе процессора Motorolla 68040), операционной системы (базировавшейся на микроядре Mach) и графического пользовательского интерфейса (последние два компонента получили имя NextStep).

Созданная в конце 80-х, платформа Next далеко опередила свое время — как с точки зрения потребностей массового пользователя (машины эти включили в себя CD-ROM и звуковую карту как стандартные компоненты тогда, когда на PC это было экзотикой и архитектурным излишеством), так и возможностей оного (все это железное богачество влекло за собой соответствующую цену). И потому довольно быстро прекратила свое существование — сначала в хардверной своей части (последние Next-машины были выпущены в 93-м, если мне не изменяет память, году), а затем — и в софтверной (развитие NextStep, уже для платформы Intel, фактически прекратилось году к 95-му).

Но дело ее не пропало. С одной стороны, NextStep послужил прототипом того, что в наши дни получило имя MacOS X — Unix-подобной операционки современных Mac’ов. С другой же стороны — идеи NextStep легли в основу двух свободных оконных менеджеров для системы X — AfterStep и WindowMaker. Последний и будет предметом настоящей заметки.

WindowMaker стандартно входит в большинство дистрибутивов Linux, присутствует в портах Free- и OpenBSD. И, естественно, может быть скачан с сайта проекта. Так что на получении и установке его я останавливаться не буду. Замечу только, что перед первым его использованием требуется настройка — путем запуска файла /usr/X11R6/bin/wmaker.inst от лица того пользователя, который желает иметь его своим оконным менеджером по умолчанию. Этот конфигуратор, во-первых, вносит необходимые изменения в пользовательский файл инициализации Иксов ~/.xinitrc, во-вторых — создает в домашнем каталоге пользователя подкаталог ~/GNUstep/, содержащий основные файлы конфигурации WindowMaker’а с некими умолчальными его настройками.

Первое, что привлекает внимание после запуска WindowMaker — крупные трехмерные кнопки вдоль правого края экрана, образующие управляющую панель, именуемую доком (Dock). Двойной щелчок левой клавишей мыши на большинстве входящих в панель кнопок запускает приложения (их набор прописан в конфигурационных файлах и с реально установленными в системе программами никак пока не соотносится) либо конфигурационные утилиты.

Правда, верхняя кнопка (именуемая WMDock) по умолчанию ничего не запускает, а служит для управления положением панели на экране: ухватив за нее, панель можно перемещать вверх-вниз или с правой на левую сторону экрана (на верхнюю или нижнюю — нельзя). Но к ней можно привязать какое-либо приложение, которое требуется запускать при старте Window Maker.

Вторая сверху кнопка (ASClock) — это просто индикатор времени и даты. Третья (xterm) запускает одноименный X-терминал xterm (но ей можно приписать и любую другую терминальную программу). А четвертая — (WMPefs) служит для конфигурирования Window Maker (как — расскажу чуть ниже).

Одинокая кнопка слева вверху (Clip) выполняет двоякую функцию: переключения (но не создания) виртуальных экранов или, в терминологии программы, рабочих пространств (Workspace), и прикрепления (пришвартования, в терминологии оригинала) приложений.

Все остальное пространство экрана свободно и представляет собой рабочий стол. Щелчок на нем правой клавишей мыши вызывает контекстное меню, а правой — список запущенных приложений. Эти всплывающие панели не исчезают, в отличие от KDE или Windows, самопроизвольно. Щелчок левой клавишей никакого действия на них не оказывает: чтобы закрыть всплывающую панель, следует щелкнуть мышью на заголовке и затем — на появившемся крестике. Либо — щелкнуть соответствующей (правой или средней) клавишей вне меню на рабочем столе.

Из контекстного меню создаются (в любом количестве, через пункты ApplicationWorkspaceСоздать) и удаляются новые виртуальные экраны, между которыми потом можно переключаться уголками на кнопке Clip. Между которыми потом можно переключаться уголками на кнопке Clip. Переключение экранов сопровождается объемной анимацией их названий в центре экрана. Однако, поскольку название экрана по умолчанию русское (Рабочее место #), то при отсутствии соответствующего шрифта может анимироваться абракадабра. Впрочем, название экрана легко изменяется щелчком правой клавиши на кнопке Clip. Открытые приложения по умолчанию не переходят на новый экран.

Для запуска приложений, кроме кнопок на панели и стандартного терминала, используется также контекстное меню рабочего стола. Этой цели в нем служит пункт Run, запускающий минитерминал. В командной строке которого и вводится имя исполняемого файла нужной программы.

Тем не менее, основной способ запуска программ — через кнопки Dock‘а. Однако о пополнении управляющей панели необходимыми для работы кнопками следует позаботиться самому. Как — a priory не совсем ясно. Но методом ползучего эмпиризма можно найти несколько способов.

Первый — запустить приложение, выбрав из контекстного меню рабочего стола упомянутый пункт Run. Одновременно с открытием окна приложения на рабочем столе появляется его пиктограмма, внешне аналогичная кнопкам панели. Она захватывается мышью и просто перетягивается в панель. Где и остаётся на веки веков, если вам не придёт в голову ее истребить. Что также предельно просто — кнопка захватывается мышью и перетягивается за пределы панели на рабочий стол, где она рассыпается в прах.

С некоторыми приложениями (например, из KDE, или с программами, базируемыми на Motif, типа NEdit’а) этот способ не проходит. Чтобы встроить кнопки для таких софтин в Dock, требуется: запустить нужное приложение, затем по щелчку правой клавиши мыши на заголовке ее окна вызвать контекстное меню, выбрать в нем пункт Свойства окна, перейти к подпункту Дополнительные параметры и отметить там опцию Эмулировать значок приложения, сохранить эту установку и перезапустить приложение. При следующем его запуске появляется та самая пиктограмма, которую можно перетащить в Dock.

Есть и третий способ — правка вручную конфигурационных файлов, о чем скажу чуть позже.

Окно запущенного приложения по умолчанию имеет в строке заголовка два управляющих значка — минимизации слева и закрытия справа. По щелчку правой клавишей мыши на строке заголовка окно можно развернуть на полный экран, свернуть (то есть минимизировать), втянуть (то есть сократить до строки заголовка), выделить, перемасштабировать/переместить, закрыть (нормальное завершение программы) и убить (аварийное завершение программы, то есть команда kill).

По щелчку же на титульной строке окна осуществляется доступ к свойствам и параметрам. Свойства — это атрибуты окна, такие, как наличие/отсутствие строки заголовка, кнопок закрытия и минимизации, изменяемость размера и прочее, а также исходное рабочее место (программу можно жестко привязать к любому из существующих виртуальных десктопов). Параметры — это положение на рабочем столе (всегда вверху или внизу), а также присутствие везде (как я уже говорил, по умолчанию каждое приложение существует только на том виртуальном экране, на котором оно открыто).

WindowMaker имеет богатые возможности настройки, осуществляемой тремя взаимодополняемыми способами. Перво-наперво, базовые настройки осуществляются через кнопку WMPefs. Она вызывает окно конфигурирования WindowMaker, где можно настроить:

  • позицию открываемых окон (автоматически, случайно, каскадно или ручками);
  • фокусировку окна (щелчком или вслед за курсором мыши), а также определить время автоматического всплывания окна (от 10 до 800 мсек, по умолчанию — никогда);
  • выравнивание подменю — в стиле Windows, ниспадающим каскадом, или по верхнему краю;
  • расположение минимизированных окон и их выравнивание, а также размер экранных кнопок и иконок (от 24х24 до 96х96 пикселей);
  • появление и характер всплывающих подсказок (по умолчанию отключены вообще);
  • пути поиска графических файлов для пиктограмм и фоновых изображений);
  • навигацию по виртуальным экранам (циклическую, с возвратом на первый экран после последнего, или с открытием нового экрана после последнего существующего); здесь же можно отключить WMClip и WMDock (а вот включить обратно их можно только ручной правкой одного из конфигурационных файлов).

Имеются также средства настройки внешнего вида иконок, окон, горячих клавиш, свойств мыши и прочее. А главное — настройка меню приложений, о чем следует сказать подробнее.

В меню приложений (то есть Applications, вызываемые из контекстного меню рабочего стола правой клавишей мыши) можно добавить (и, разумеется, удалить) пункты первого уровня, которые могут содержать подменю любого уровня вложенности. И с любым количеством пунктов, которым приписываются любые команды — достаточно указать ее имя (или полный путь).

Кроме того, здесь же, кроме выхода из WindowMaker и его перезапуска, можно (в подпункте Switch to) прописать вызов любого доступного оконного менеджера, также с привязкой к горячей клавише. Делается это абсолютно так же, как и вызов прикладных программ. При этом переключение в другой оконный менеджер или графическую среду (например, KDE) происходит с сохранением всех открытых приложений. К сожалению, обратная процедура (то есть, скажем, возврат из KDE в WindowMaker) невозможна.

Дополнительные настройки внешнего вида WindowMaker можно выполнить из всплывающего меню Applications (подменю Appearance, а не Workspaces, как можно было бы ожидать). Здесь можно определить:

  • тему целиком (из фиксированного набора, который легко пополнить);
  • стили окон и меню (из списка в более чем две дюжины позиций);
  • установки иконок;
  • фоновое оформление — сплошная или градиентная цветовая заливка, изображения в любом распространенном растровом формате; фон становится общим для всех виртуальных экранов, как существующих, так и создаваемых позднее.

Из комбинации всех этих элементов легко создать собственную тему и сохранить ее в виде файла для дальнейшего использования. Отсутствует только возможность изменения базового шрифта — это делается исключительно вручную.

А Window Maker, как и любой уважающий себя элемент Unix-системы, позволяет точную ручную настройку путем правки конфигурационных файлов. Они, в количестве пяти штук, автоматически копируются в каталог ~/GNUstep/Defaults при исполнении первичного конфигуратора.

В файле ~/GNUstep/Defaults/WMGLOBAL, как явствует из его названия, определяются наиболее общие параметры. В частности, только здесь (я, по крайней мере, другого места не нашел) можно переопределить шрифт для элементов рабочего стола.

В файле ~/GNUstep/Defaults/WindowMaker указываются стили меню и икон, цветовая палитра, пути для икон и фоновых рисунков и многие другие параметры, определяемые через WMPrefs. Через который их и лучше изменять при необходимости. Однако, если вы случайно отключите WMClip и WMDock, единственный способ вернуть их в зад — отыскать в этом файле строки

DisableClip = YES;
DisableDock = YES;

и заменить YES на NO. Или просто удалить, ибо NO — значения обеих этих строк по умолчанию. Только сделать это нужно либо в консольном режиме, либо — переключившись в другой оконный менеджер; иначе WindowMaker при выходе восстановит значения текущего сеанса.

Файл ~/GNUstep/Defaults/WMRootMenu описывает содержание меню Applications, вызываемого с рабочего стола и также определяемого через WMPrefs. Содержание файла ~/GNUstep/Defaults/WMWindowAcodeributes ясно из названия. Ну а файл ~/GNUstep/Defaults/WMState — описание панели WMDock и рабочих мест. Именно его легко отредактировать для внесения новых приложений в WMDock.

Каков же вывод из всего рассмотренного? В целом, по-моему, сугубо положительный. Конечно, на первый взгляд Window Maker выглядит непривычно для пользователя Windows. Однако этим и пробуждает здоровое любопытство. Тем более что удовлетворение его не связано ни с какими принципиальными сложностями.

Возможных настроек почти достаточно для удовлетворения личных эстетических идеалов. А также — для внесения разнообразия в производственный процесс. Устойчивость — на уровне, основные манипуляции с приложениями выполняются (при наличии минимальной привычки и после несложных настроек) легко и быстро. Сам же по себе WindowMaker не только не производит впечатления «тормознутости», но, напротив, на современных машинах очень и очень быстр. И все это — при весьма привлекательной (достаточно просто модифицируемой) внешности.

Для WindowMaker’а написано большое количество дополнительных модулей, расширяющих его функциональность, многочисленные темы для разнообразия внешнего вида и средства управления ими. Этот комплекс опциональных средств приближает его возможности к таковым интегрированных сред. Кроме того, WindowMaker принят в качестве базы для GNUStep — чего-то вроде системы пользовательского окружения (application framework), предполагаемого к использования в разработках проекта GNU.