Допиливаем openbox (часть 1)

Заранее отвечу на два простых вопроса:
  1. а нафига? - чтобы было удобнее;
  2. и где взять? - openbox-eui в AUR. По частям почти всё доступно в Бугзилле.
Я подсел на openbox давно. Когда стало ясно, что тенденции развития KDE и Гнома меня не устраивают, я перепробовал многое, и на тот момент мне понравился crunchbang (тогда он ещё базировался на Убунту). Ну а потом панель стала удручать всё больше и больше. Перепробовал разные панели, вплоть до жуткой cairo-dock, и понял, что дело не в недостатках конкретных панелей, а в генетической ущербности самой идеи панели. Точнее, не панели вообще, а двух её основных элементов: панели задач и тулбара. Тогда и подумалось, а нельзя ли функции панели задач и тулбара реализовать прямо в openbox? Оказалось, что можно, и гораздо лучше, чем в панели.

Замена панели задач
Традиционная панель задач — это горизонтальная полоса кнопок с иконками и сокращёнными заголовками окон. Клик на такой кнопке активизирует окно, а правый клик вызывает меню дополнительных действий. Но если окон много, то заголовки становятся нечитаемыми. А если имеется несколько десктопов, то совсем плохо. Если на панели представлен только один, то как просмотреть другие? А если на панели представлены все десктопы, то тексты точно будут нечитаемыми. Стильная идея помещать на панели задач только иконки тоже не катит. Вполне может быть несколько окон с одинаковыми иконками (скажем, несколько терминалов). Объединение нескольких окон в одной кнопке — тоже плохо, хотя бы из-за того, что это лишние клики и перемещения мыши. Док-панели, как в Windows7, гармонично соединяют худшие качества панели задач и тулбара. Так называемые пейджеры (pager) — тоже плохо - из-за того, что на них не видно минимизированных и спрятавшихся сзади окон.
В общем, трудно придумать что-то лучше, чем вертикальный список с иконками и заголовками, да ещё и упорядоченный по десктопам. То есть в аккурат client-list-combined-menu.
Но если по внешнему виду client-list-combined-menu — это как раз то, что надо, то по функциональности оно просто никакое. Но есть с чего брать пример. В покойной IBM OS/2 штатный список окон (вызываемый по Ctrl-Esc) работал так: левый клик активизировал окно, а по правому клику появлялось меню с дополнительными действиями (включая Close). А ещё лучше в той же OS/2 работал список задач левой DE FileBar: там список задач — это меню, и каждому окну соответствует подменю с действиями над окном. Но при этом наличие лишнего уровня меню не приводит к лишним кликам, поскольку в меню OS/2 есть (и в FileBar использована) замечательная фишка: подменю с умолчаниями. Так вот, в FileBar подменю действий имеет умолчание - «Активизировать». Так что левый клик на строке окна приводит сразу к его активизации, как и в «нормальном» списке окон. Вот такую функциональность я и добавил в client-list-combined-menu. Это на Бугзилле bugs 4795, 5239. Так что теперь из client-list-combined-menu можно не только активизировать окно, но и закрыть или перекинуть на другой десктоп. При этом для стандартного действия («Активизировать»), как и раньше, достаточно одного клика.

Замена тулбара
Традиционный тулбар - это полоса иконок вызова приложений (действий). Большое значение имеет размер иконок, но плохо получается по-любому: если иконки большие, то теряется много места, а если маленькие, то в них трудно попадать. Всплывающий тулбар — это отдельная песня, поскольку само всплывание по касанию края экрана, как правило, достаточно по-дурацки реализованно. Например, трудно придумать бОльший абсурд, чем всплывающая панель KDE4: всплывает она мгновенно от прикосновению к краю, а прячется по уводу мыши только после задержки. Как раз то, что нужно, чтобы целясь во что-то, расположенное близко к краю, случайно зацепить край и потом не спеша материться, пока панель закрывает элемент, в который целились.
Так вот, для мышиного вызова небольшого числа приложени/действий я нашёл великолепное готовое решение прямо в openbox. Один из двух основных авторов, Mikael Magnusson AKA Mikachu, в своём git имеет ветку edges, где действия можно навешивать на клики на краях экрана. Края — это 4 угла и 4 стороны, а клик — это и колесо в том числе. В данной реализации такие клики имеют наивысший приоритет, вплоть до того, что рабатают даже на полноэкранном приложении, что очень удобно.
Такой набор зон хорош тем, что в них очень легко попадать, хоть и вовсе не гляди на экран. И их количество (8) как раз оптимально: и не слишком мало, и запомнить легко. К тому же на любую из них можно навесить своё меню. Например, на левый клик в левом нижнем углу вешаем pipe-меню установленных приложений, и получаем как бы привычную кнопку «Пуск», но вообще не занимающую место на экране.
Впрочем, ложка дёгтя нашлась и тут, даже две. Первая — что все эти 8 зон всегда активны. Если для какой-то из них не определить никаких действий, то она будет просто проглатывать клики, что очень неудобно. Поэтому я чуть-чуть изменил логику: по умолчанию все зоны края не активны, а активизируются только те, для которых реально задана хоть одна привязка.
Вторая ложка дёгтя связана с удобством настройки. Скажем, правый клик на пустом месте традиционно вызывает главное меню. Соответственно, и в одном пикселе от верхнего края он тоже вызывает главное меню. И будет очень странно, если такой же клик ещё на пиксель выше будет просто игнорироваться или вызывать другое действие. По-моему, логично, чтобы края имели все те же самые привязки (mousebind), что и пустое место, плюс дополнительные привязки для левого клика, который на пустом месте обычно не задействован. Но для этого придётся восемь раз скопипастить все привязки контекстов Desktop и Root, а потом, если что, в девяти местах корректировать - бррр.... Поэтому я ввёл средство импорта привязок из других контекстов. Теперь для каждого из задействованных краёв достаточно включить <import>Root</import> <import>Desktop</import>. Например, для нижнего левого угла у меня задано следующее:
    <context name="ScreenBottomLeft">
      <import>Root</import> <import>Desktop</import>
      <mousebind action="Press" button="Left">
        <action name="ShowMenu">
          <menu>desktop-app-menu</menu>
        </action>
      </mousebind>
    </context>
То есть левый клик в этом углу вызывает pipe-меню приложений (типа невидимая кнопка «Пуск»), а остальные действия — те же, что и на пустом месте (скажем, правый клик - «ручное» главное меню, средний клик — client-list-combuned-menu).
В результате панель оказывается не нужна вообще: функции кнопки «Пуск», панели задач и тулбара допиленный openbox исполняет лучше, а гаджеты-информеры и трей прекрасно заменяются при помощи conky и stalonetray.
Эти две функции (улучшенный client-list-combined-menu и работа с краями) — главное, но есть и ещё несколько полезных мелочей. О них во второй части.
Былоб не плохо добавлять скрины
по моему одной менюшки хватало вполне, вызывать по касанию края вообще не вижу смысла...
а фишки типа ScreenBottomLeft, позволяют на мой взгляд реализовать вполне не чё так тайлинг, кстати из за отсутствия оного не так давно променял openbox на dwm и доволен как слон)))
Ошибки в тексте-неповторимый стиль автора©
indeviral
вызывать по касанию края вообще не вижу смысла...
Не по касанию, а по клику на краю.
Действия по касанию мне тоже не нравятся - это или тормозит (если большая задержка срабатывания) или мешает ложными срабатываниями (если задержка маленькая или нулевая). Но если кому-то всё-таки хочется навешать действий на касания, то это умеет xdotools.
Xts
Было б не плохо добавлять скрины
А не на что. Тут нет красоты, тут есть удобство. Это надо не смотреть на картинке, а пробовать руками. (Вторую и последнюю часть постараюсь выложить сегодня вечером)
akorop, ну как бы расположение и т.д, например на счет панели задач, не особо представляю что там получилось
Xts
akorop, ну как бы расположение и т.д, например на счет панели задач, не особо представляю что там получилось
Вот те раз... А я тут распинаюсь, что панель задач не нужна вообще...
А Вы - пользователь openbox?
akorop, использовал с год где то, сейчас нет, странно он себя ведет
Стильная идея помещать на панели задач только иконки тоже не катит. Вполне может быть несколько окон с одинаковыми иконками (скажем, несколько терминалов).
Проблему "нескольких терминалов" мне проще было бы решить разными иконками, условно: "term_1", "term_2" — т.е. "одинаковые иконки" явно не повод для отказа от панели как таковой.
Это всё субъективно, ты ж понимаешь — кому-то привычнее (или интереснее) замутить новый конфиг, кому-то подрисовать пару-тройку иконок.

И это даже не критика, а так, просто лёгкое недоумение.

На самом деле, было бы интересно увидеть скрины.
Народ, я правда не понимаю, что я могу показать. Курсор мыши на краю пустого экрана? Видео, как мои пальцы нажимают последовательность клавиш?
Единственное, что по внешнему виду чуть-чуть отличается от стандартного openbox, - это подменю с умолчанием. В принципе, это настраивается через тему, но стандартно это треугольничек в квадрате. И этим же знаком помечен сам умолчательный элемент внутри подменю. Так что даю таки фотку моего client-list-combined-menu в момент, когда уже открыто подменю переноса на другой экран:
Если сейчас сделать левый клик, то mc перенесётся с десктопа 3 на этот десктоп (1), поскольку это пункт по умолчанию.
Всё остальное выглядит точно так же, как в стандартном openbox.

(Вообще-то, я думал, что заинтересовать это может только тех, кто реально использует openbox, и кто хотел бы сделать свою работу удобнее.)
 
Зарегистрируйтесь или войдите что-бы оставить сообщение.