Wednesday, March 23, 2011

E17 fill direction patch

In order to minimize the use of the mouse as an input method I tend to map as many useful functions to keyboard shortcuts. Want to get rid of a window and dump it on the next desktop to concentrate on something else? Hit Shift+Alt+Right. Want to see what's going on in IRC & instance messaging without walking through the window selector by alt-tabbing? Alt+F4 to jump to the fourth desktop and Alt+F1 to get back to the first. Those are some of my most used shortcuts I tend to set up in every desktop environment.

Because E17 isn't a tiling window manager, a lot of manual window resizing is required. Thus I use to make my life a lot easier by assigning maximization to a function key. E.g. F6 maximizes vertically while F7 maximizes horizontally. I rarely use full maximization (in both directions) because applications like virtual terminals tend to become unreadable, especially line breaks. Full maximization is available by a default shortcut (Alt+Ctrl+f) or by pressing F6 followed by F7. This, however, doesn't yet act anything like a tiling window manager. Normal maximization will ignore other windows and hide or overlap them. That's where the "fill"-mode maximization kicks in. It smartly tries to find a way to enlarge the current window without overlapping others. E17 provides this function with the action "Maximize Mode 'Fill'".

But coming back to the example of the terminal window, I'd like this particular window to keep its horizontal size. I haven't found a way to achieve this with action params in the current revision of E17 and instead dug into the source code to add two new actions: "Maximize Mode 'Fill Vertically'" and "Maximize Mode 'Fill Horizontally'":

--- src/bin/e_actions.c (revision 58033)
+++ src/bin/e_actions.c (working copy)
@@ -2745,6 +2745,10 @@
"window_maximized_toggle", "expand", NULL, 0);
e_action_predef_name_set(N_("Window : State"), N_("Maximize Mode \"Fill\""),
"window_maximized_toggle", "fill", NULL, 0);
+ e_action_predef_name_set(N_("Window : State"), N_("Maximize Mode \"Fill Vertically\""),
+ "window_maximized_toggle", "fill vertical", NULL, 0);
+ e_action_predef_name_set(N_("Window : State"), N_("Maximize Mode \"Fill Horizontally\""),
+ "window_maximized_toggle", "fill horizontal", NULL, 0);

ACT_GO(window_maximized);



It can be downloaded here.

0 comments: