LINUX.ORG.RU
ФорумTalks

тайлинг с openbox

 ,


3

2

захотелось немного тайлинга внутри обычного openbox, чтобы можно было вменяемо пользоваться qtoctave. так как сам openbox не умеет, наткнулся на приблуду: whaw. Мне _очень_ понравилось. Я думаю, что для многих это будет неплохим компромиссом между тайлинговым wm и обычным плавающим оконным менеджером.

★★☆☆☆

Ответ на: комментарий от evilmanul

да там ничего впечатляющего на скриншоте быть не может :) whaw умеет только горизонтальное/вертикальное разделение. Но все равно очень удобно даже так.

http://rghost.ru/53466711

но это в динамике надо показать...

можно например выбирать область экрана, на которой тайлить:

http://rghost.ru/53466755

и да, можно выбирать окна, которые тайлить. То есть можно тайлить не все.

dikiy ★★☆☆☆
() автор топика
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от luke

Чем вам awesome не угодил?

когда-то давно пробовал и ниасилил. слишком непривычно. Может потом и перейду на него. А пока openbox всем устраивает. А с сабжем вообще шикарно.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от evilmanul

Спасибо! Выглядит юзабельно и интересно. Жаль, что я всё не решаюсь на Openbox перейти.

ну так whaw с любым другим оконным менеджером тоже работать будет скорей всего. он не привязан к openbox.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от MiniRoboDancer

А мне не нужно, у меня компиз есть, 15 МБ рамы жрёт, полёт нормальный.

компиз - композитный оконный менеджер => видюха жрет больше электроэнергии и приложения, использующие opengl тормозливее будут.

ну и неизвестно, может ли он тайлинг как это может whaw. И я не знаю, как это компиц жрет 15М рамы, а openbox - 36M щ_Щ

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

видюха жрет больше электроэнергии

А что, есть видюхи, где оно жрёт больше одного уровня энергопотребления?

как это может whaw
только горизонтальное/вертикальное разделение

В компизе круче адназначна.

И я не знаю, как это компиц жрет 15М рамы, а openbox - 36M щ_Щ

Я тоже. При том, что там плагинов под десяток включено. Причём 6 МБ - декоратор (которым я не пользуюсь, выставлен только чтобы тень работала, компиз без декоратора её рисовать не хочет), сам процесс компиза 9 МБ жрёт.

MiniRoboDancer ★☆
()
Ответ на: комментарий от MiniRoboDancer

видюха жрет больше электроэнергии

А что, есть видюхи, где оно жрёт больше одного уровня энергопотребления?

ну как же, если не используется opengl, то и видюха жрет меньше.

как это может whaw

только горизонтальное/вертикальное разделение

В компизе круче адназначна.

все бы ничего, то композитный менеджер имеет вышеописанные недостатки.

И я не знаю, как это компиц жрет 15М рамы, а openbox - 36M щ_Щ

Я тоже. При том, что там плагинов под десяток включено. Причём 6 МБ - декоратор (которым я не пользуюсь, выставлен только чтобы тень работала, компиз без декоратора её рисовать не хочет), сам процесс компиза 9 МБ жрёт.

я знаю, что чудес не бывает. мне очень интересно, как так получается. может там память видюхи как-то неотображается?

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от MiniRoboDancer

ну вот может openbox хранит графику в системной памяти, а компиз в видюшной...

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от swelf

ну, я смотрю в top'е на коронку RES.

dikiy ★★☆☆☆
() автор топика

поделюсь-ка я патчиком. Он добавляет возможность выбирать активный угол. Так как изначально программа умеет только верхний левый. Выбор осуществляется переключателем -c

--- ./whaw-0.1.2/whaw.c	2005-08-10 11:18:05.000000000 +0200
+++ /tmp/whaw.c	2014-03-29 18:45:30.006788886 +0100
@@ -61,6 +61,7 @@
 static int opt_vert_frame = -1;
 static int opt_horiz_frame = -1;
 static int opt_bordersize = 1;
+static int opt_corner = 0;
 
 static const unsigned long idle_mask      = StructureNotifyMask | EnterWindowMask;
 static const unsigned long activated_mask = StructureNotifyMask | EnterWindowMask | PointerMotionMask;
@@ -80,6 +81,7 @@
         { "vertical_frame", 0, POPT_ARG_INT, &opt_vert_frame, 0, "vertical space needed by window frames. will be autodetected with modern window managers.", NULL},
         { "horizontal_frame", 0, POPT_ARG_INT, &opt_horiz_frame, 0, "horizontal space needed by window frames. will be autodetected with modern window managers.", NULL},
         { "border_size", 0, POPT_ARG_INT, &opt_bordersize, 0, "How close we are willing to get to the edge of the work area.", NULL},
+        { "corner", 'c', POPT_ARG_INT, &opt_corner, 0, "Which corner will be \"sensitive\": NW - 0 (default), NE - 1, SW - 2, SE - 3", NULL},
         POPT_AUTOHELP
         POPT_TABLEEND
 };
@@ -212,11 +214,31 @@
 {
         unsigned long valuemask = CWEventMask | CWWinGravity | CWOverrideRedirect;
         XSetWindowAttributes att;
+        XWindowAttributes gatt;
         att.event_mask = idle_mask;
         att.win_gravity = corner;
         att.override_redirect = True;
+        int x,y;
 
-        w = XCreateWindow(dpy,DefaultRootWindow(dpy),0,0, opt_winsize, opt_winsize, 0, 0, InputOnly, None, valuemask, &att);
+        XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &gatt);
+
+        switch(opt_corner) {
+            case 1: x=gatt.width-opt_winsize;
+                    y=0;
+                    break;
+            case 2: x=gatt.width-opt_winsize;
+                    y=gatt.height-opt_winsize;
+                    break;
+            case 3:
+                    x=0;
+                    y=gatt.height-opt_winsize;
+                    break;
+            default:
+                    x=0; y=0;
+        }
+
+
+        w = XCreateWindow(dpy,DefaultRootWindow(dpy), x, y, opt_winsize, opt_winsize, 0, 0, InputOnly, None, valuemask, &att);
 
         XMapRaised(dpy,w);
 
@@ -422,6 +444,7 @@
 int
 main(int argc, const char **argv)
 {
+        XWindowAttributes gatt;
         poptContext popt = poptGetContext("whaw", argc, argv, options, 0);
         int rc = poptGetNextOpt(popt);
         if(rc < -1) {
@@ -529,6 +552,10 @@
                                 XGrabPointer(dpy, DefaultRootWindow(dpy), True, activated_mask , GrabModeAsync, GrabModeAsync, None, cursor_cross, ev.xcrossing.time);
                                 long win = None;
                                 get_property(dpy,DefaultRootWindow(dpy), XA__NET_ACTIVE_WINDOW, XA_WINDOW, &win, sizeof(long), 0, 0);
+
+                                //Get the Screen WxH on the EnterNotify.
+                                XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &gatt);
+
                                 saved_focus = win;
                                 destroy_winlist(true, true);
                                 break;
@@ -537,11 +564,27 @@
                                 break;
                         case MotionNotify:
                                 assert(!in_drag);
-                                if(ev.xmotion.y > opt_threshold) {
+
+                                int _x,_y;
+                                switch (opt_corner) {
+                                    case 1: _x=gatt.width-ev.xmotion.x;
+                                            _y=ev.xmotion.y;
+                                            break;
+                                    case 2: _x=gatt.width-ev.xmotion.x;
+                                            _y=gatt.height-ev.xmotion.y;
+                                            break;
+                                    case 3: _x=ev.xmotion.x;
+                                            _y=gatt.height-ev.xmotion.y;
+                                            break;
+                                    default:_x=ev.xmotion.x;
+                                            _y=ev.xmotion.y;
+                                }
+
+                                if(_y > opt_threshold) {
                                         XChangeActivePointerGrab(dpy, choosing_mask , cursor_vertical, ev.xmotion.time);
                                         style = vertical;
                                         break;
-                                } else if(ev.xmotion.x > opt_threshold) {
+                                } else if(_x > opt_threshold) {
                                         XChangeActivePointerGrab(dpy, choosing_mask , cursor_horizontal, ev.xmotion.time);
                                         style = horizontal;
                                         break;
dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от alozovskoy

да. pytyle2 вроде довольно крут. Но уже почти что оверкилл. если осилить pytyle2, то в принципе можно уже сразу на ion3 какой-нить перелезать.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от luke

Чем вам awesome не угодил?

Нерепарентинговостью.

Мантра, что клавиатурное управление есть только в тайлинге — бред сивой кобылы, читаемая полнейшими имбецилами.

baverman ★★★
()
Ответ на: комментарий от Solace

Как раз раз тайлинга у меня и нет)) Просто не нужен. Окно или максимизировано или плавает.

baverman ★★★
()
Ответ на: комментарий от MiniRoboDancer

А мне не нужно, у меня компиз есть, 15 МБ рамы жрёт, полёт нормальный.

О. А теперь у меня openbox только 6MB рабы скушал. видать в прошлый раз после суровых выводов графиков из октавы он разросся.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

Рабы 32MB скушали? :3 А чё это ты рабов рамой кормишь? Ещё и такими маленькими кусочками? Я надеюсь, их у тебя немного хоть?

MiniRoboDancer ★☆
()
Ответ на: комментарий от MiniRoboDancer

А вообще, так и запишем: опенбокс течёт, как гномощель.

запиши, чо.

dikiy ★★☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.