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

konstantinov-ms
Со временем накапливается достаточно много окон, в которых начинаешь путаться. ... Но ещё удобнее была бы возможность группировать окна так, как это сделано во Fluxbox.
У меня тоже всегда дофига открытых окон. Но я их группирую просто по виртуальным десктопам. Мало десктопов - добавляю, благо, это делается в два клика. Как я понимаю, группировака приложений в одном окне ориентирована на использование одного десктопа. Тогда объединённые окна - это первый уровень (управляемый через панель), а приложения в окне - второй уровень (управляемый через заголовок окна). А "стандартная (для openbox) альтернатива - десктопы на первом уровне, окна на втором.

Так вот, я не вижу никаких преимуществ группировки несколько приложений в одном окне по сравнению с группировкой нескольких окон в одном десктопе. Разумеется, у меня "в сундучке" есть на этот счёт горячие клавиши. Например, хоткей W-A-Right - это переход на соседний вправо рабочий стол вместе с активным окном. Если надо перейти дальше, W-A-Right можно быстро нажать несколько раз. Ну и, само собой, расширенное client-list-combined-menu позволяет легко реорганизовать окна, особенно в сочетании с недокументированным Ctrl, который препятствует закрытию меню (Ctrl действует на все меню openbox, не только на client-list-combined-menu).

А недостатки группировки в одном окне очень даже видны. Прежде всего, разные приложения обычно имеют разную оптимальную геометрию окна. Во-вторых, отдельными окнами проще управлять, например, минимизировать-восстановить, или перенести на другой рабочий стол. Кроме того, часто удобно, работая с одним окном, видеть часть другого, что исключено в случае объединённого окна.

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

Что я упустил?
akorop
Мало десктопов - добавляю, благо, это делается в два клика
Я тоже пробовал действовать таким образом. В итоге десктопов набиралось больше десятка, а ярлыки на панели сжимались в тоненькие полоски. Конечно, если отключить функцию мультидесктопа в tint2, то проблема исчезнет. Но мне эта функция удобна своей наглядностью — быстрее ориентируешься, если забыл, на каком из рабочих столов находится подборка документов по теме. Да и быстро поднять нужное окно, при этом перейдя на нужный рабочий стол, удобнее.

akorop
Как я понимаю, группировака приложений в одном окне ориентирована на использование одного десктопа.
Да. И в определённых случаях (допускаю, что не очень частых случаях) это может иметь смысл. Пример из реальной практики: имеем рабочий стол с документами по диссовету. Звонит соискатель с какими-то вопросами или просьбой. Переходим на нужный рабочий стол (Win-номер_рабочего стола) и перед нами опять груда документов (Положение о диссовете, Положение о порядке присвоения учёных степеней, несколько открытых писем, несколько папок и т.д.). Удобнее было бы сгруппировать на этом рабочем столе все документы одного соискателя в одно окно. Только по этой причине я использую иногда WPS вместо LibreOffice (наличие вкладок) — для word'овских документов, и qpdfview вместо llpp — для .pdf-файлов. Однако часть документов — в .doc(x), часть — в .pdf (отсканированные отзывы и т.д.). Было бы удобно независимо от формата собирать все документы одного соискателя в одно окно. И при этом всё это держать на одном рабочем столе, посвящённом диссертационным делам. Понятно, что всё это хотелки, без которых вполне можно обойтись. Но если бы такая возможность была, я бы ею пользовался.

akorop
в сочетании с недокументированным Ctrl, который препятствует закрытию меню (Ctrl действует на все меню openbox, не только на client-list-combined-menu)
О-о-о! А вот это реально полезная фича!
Что меня ещё раздражало в комбинированном меню и заставляло пользоваться Xwinmosaic вместо него, так это то, что оно отображает те окна, которым указано быть скрытыми из пейджера (skip_pager) и таскбара (skip_taskbar). У меня есть с десяток приложений, которым указано отображаться на всех рабочих столах и поверх всех окон. Вызываются они хоткеями. Чтобы они не путались под ногами, они скипнуты и из пейджера, и из таскбара. Однако в client-list-combined-menu они всё-равно отображаются. На каждом рабочем столе! Так же как и при перелистывании "NextWindow" с помощью Alt+Tab. В этом отношении удобнее оказывается Xwinmosaic, в которой этих окон не видно.

akorop
разные приложения обычно имеют разную оптимальную геометрию окна
Ну, Вы же не шутеры полноэкранные будете комбинировать с файловым менеджером! Обычно комбинируются окна с документами, плюс иногда файловый менеджер и (возможно) окно браузера. Даже заметки удобнее в скрывающемся окне, вызываемом по хоткею.

akorop
отдельными окнами проще управлять, например, минимизировать-восстановить, или перенести на другой рабочий стол
Объединяют-то их как раз для того, чтобы управлять ими всеми сразу. К тому же, их довольно легко отсоединить, в случае надобности. Так что если с первой проблемой как-то ещё можно согласиться, то эта имхо надумана.

akorop
часто удобно, работая с одним окном, видеть часть другого, что исключено в случае объединённого окна
Вот тут полностью согласен.

akorop
объединённые окна - это странный и не очень удобный способ приспособиться к недостаткам панели задач
И с этим тоже. Думаю, более удобен был бы трёхмерный рабочий стол (когда-то пробовал какие-то разработки, но всё это было ещё очень сыро и, по-моему, в итоге заглохло). Мне кажется, классическая концепция рабочего стола вообще находится в кризисе. Но каких-то реальных альтернатив пока что не видно.
Кто-нибудь пробовал openbox-multihead?
Очень нужно, чтобы на каждом мониторе рабочий стол переключался независимо от других. При этом возможность перетаскивания окон между экранами тоже нужна.
Текущее состояние жутко бесит и тормозит работу.

P.S. Тайлинг не люблю, да.
Lupus pilum mutat, non mentem.
konstantinov-ms
У меня есть с десяток приложений, которым указано отображаться на всех рабочих столах и поверх всех окон. Вызываются они хоткеями. Чтобы они не путались под ногами, они скипнуты и из пейджера, и из таскбара. Однако в client-list-combined-menu они всё-равно отображаются
Если всё именно так, то это глюк в openbox. Можно конкретные данные? Что за приложение? Как именно скипнуто?
jim945
Кто-нибудь пробовал openbox-multihead?
Я даже пробовать не стал, когда увидел вот такое: Last Updated: 2013-08-12 01:13
akorop
Можно конкретные данные? Что за приложение? Как именно скипнуто?
Например, Sylpheed. Если оно не минимизировано, то в client-list-combined-menu не отображается. Если же свёрнуто, то появляется в client-list-combined-menu, в списке "NextWindow" и т.д. Скипнуто вот так:
    <application class="Sylpheed">
      <desktop>all</desktop>
      <layer>above</layer>
      <skip_pager>yes</skip_pager>
      <skip_taskbar>yes</skip_taskbar>
    </application>
Из других приложений: LiteTran, Gtkclock, notecase, gnome-search-tool, mytetra, novprog, Hamster и др. Зависимости от тулкита не обнаружено: приложения есть и Gtk2, и Gtk3, и Qt. Все ведут себя одинаково. Похоже, это какая-то логика Openbox или я что-то упустил при настройке отображения этих приложений.
konstantinov-ms
Если оно не минимизировано, то в client-list-combined-menu не отображается. Если же свёрнуто, то появляется в client-list-combined-menu, в списке "NextWindow" и т.д.
Понял. Да, это именно так для любых приложений. Притом свойство "на всех экранах" на это поведение не влияет.
Но я не совсем понял, как мыслится вернуть на экран такое "сильно невидимое" окно. Специальной горячей клавишей через что-то вроде wmctrl?
akorop
Но я не совсем понял, как мыслится вернуть на экран такое "сильно невидимое" окно. Специальной горячей клавишей через что-то вроде wmctrl?
Да, примерно так:
#!/bin/bash
PROCESSES=`pidof $1`
if [ "$PROCESSES" != "" ];
then
    for P_ID in $PROCESSES;
    do
	if [ "$3" == "" ];
	then
	    APP_ID=`wmctrl -pl | grep " $P_ID " | awk '{print $1}'`
        else
	    APP_ID=`wmctrl -pl | grep " $P_ID " | eval "grep $3" | awk '{print $1}'`
        fi

	if [ "$APP_ID" != "" ];
	then
	    wmctrl -ir $APP_ID -b toggle,hidden
	    break
	fi
    done

    echo "Nothing found :("
else
    $2
fi
Делаем четыре скрипта: app-and-toggle-by-pid, app-and-toggle-by-tittle, app-by-pid, app-by-title. Содержимое первого приведено выше. Затем вешаем на хоткей такую комбинацию
<execute>app-and-toggle-by-pid 'sylpheed' 'sylpheed'</execute>
. Получается довольно удобно: одним хоткеем и вызываем приложение, и скрываем его. Если приложение не запущено, скрипт его запустит.
...by-tittle отличается тем, что вызывает приложение не по pid'у, а по заголовку (пришло это из практики, поскольку не все приложения по xprop выдают pid. Особенно проблемны java-приложения. Без 'toggle' другая фишка: если приложение уже открыто, то хоткей перебросит на нужный рабочий стол и поднимет это приложение. Если закрыто, оно будет запущено. Именно для того, чтобы избежать этого прыгания по рабочим столам, и сделан скрипт c 'toggle', приложение выведено на все рабочие столы и слой установлен 'above'. А чтобы не мозолило глаза в пейджере и таскбаре, его удобнее скипнуть.

Сегодня пока был на работе, так кстати выключили свет и пришлось загружать компьютер по новой. Решил воспользоваться Вашим советом и попробовать openbox-eui. Но пока что получил облом:
Makefile:3841: ошибка выполнения рецепта для цели «all-recursive»
make: *** [all-recursive] Ошибка 1
konstantinov-ms
Makefile:3841: ошибка выполнения рецепта для цели «all-recursive» make: *** [all-recursive] Ошибка 1
Это итоговое сообщение, малоинформативное. Реальная ошибка была несколько выше, увидеть бы её.
Я, конечно, проверял пакет у себя, но сейчас понял, что не вписал в PKGBUILD зависимости, нужные для сборки. Но это не должно было привести к такому результату.
Но тем не менее, просьба после того, что-то там начнёт собираться, прервать и руками вписать в PKGBULD такую строчку:
makedepends=(binutils git patch libtool automake autoconf m4 make pkg-config gcc fakeroot)
После этого удалить каталог src и запустить makepkg
Перевыкладывать пакет прямо сейчас мне не хочется, поскольку, вероятно, через пару дней я буду это делать всё равно.
akorop
Похоже, это какая-то логика Openbox или я что-то упустил при настройке отображения этих приложений
Да, это не глюк, а фича :) (я нашёл это в исходниках). Хотели как лучше - мол, если окно минимизировано, то как же бедный пользователь его обратно вытащит?
Я закинул в рассылку (openbox@icculus.org) вопрос о том, как убрать такие окна из списка, и оперативно получил от ответ прямо от Даны, что мол, openbox - не панель, и стандартам для панели следовать не обязан. Я предложил ввести на этот счёт настройку, но по прошлому опыту предполагаю, что это дохлый номер. Так что настройку, отключающую эту глюкофичу, наверно, придётся мне ввести в openbox_eui.
 
Зарегистрироваться или войдите чтобы оставить сообщение.