Xfce Wiki

Sub domains
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
windowgrid [2012/08/05 09:57]
killermoehre
windowgrid [2012/09/04 20:34]
killermoehre added link for grid-plugin
Line 1: Line 1:
 ====== Window-Grid ====== ====== Window-Grid ======
-Similar to the Window-Grid-PlugIn for Compiz ​(Link needed) ​features this python-script some placing capabilities. +Similar to the [[http://​suasol.wordpress.com/​2008/​06/​28/​new-tiling-plugin-for-compiz-fusion-grid/​|Window-Grid-PlugIn for Compiz]] features this python-script some placing capabilities. ​Featuring now v2 
-   ​+
 TODO: TODO:
   * find some way to store the window state (int; 1, 2, or 3) with the window   * find some way to store the window state (int; 1, 2, or 3) with the window
Line 8: Line 8:
 If there are questions, please ask (and help). If there are questions, please ask (and help).
  
----- +http://dl.dropbox.com/u/391333/window_grid2
-    #​!/​usr/​bin/​python2 +
-    # -*- coding: utf-8 -*- +
-     +
-    import sys +
-    import argparse +
-    from gtk import gdk +
-    import wnck +
-     +
-    PACKAGE = "​window_grid"​ +
-     +
-    def argument_parser():​ +
-        """​ +
-        The argument parser. Takes only one number from the cmd line in the range of +
-        0 to 10. +
-        """​ +
-        parser = argparse.ArgumentParser(description='​Tile the current window.'​) +
-        parser.add_argument('​position',​ +
-            metavar='​N',​ +
-            type=int, +
-            help='​an integer describing the position',​ +
-            choices = xrange(10) +
-            ) +
-        return parser.parse_args() +
-     +
-    def active_window():​ +
-        """​ +
-        Returns the default screen, but it fails uncatchable when not called from X. +
-        """​ +
-        screen = wnck.screen_get_default() +
-        screen.force_update() +
-        return(screen.get_active_window())  +
-     +
-    def get_geometry():​ +
-        # just a shorting for wnck.Window.get_geometry(active_window()) +
-        return(active_window().get_geometry()) +
-     +
-    def window_state(head,​ sub = int(1)): +
-        """​ +
-        Returns the upper left edge and the dimensions of the current window. +
-        The HeadMap showing the screen; 4, 5 and 6 are vertical full, +
-                                       2, 5 and 8 are horizontal full. +
-        ┌─────────────────┬─────────────────┐ +
-        │                 ​┆ ​                │ +
-        │        7        8        9        │ +
-        │                 ​┆ ​                │ +
-        ├┄┄┄┄┄┄┄╴4╶┄┄┄┄┄┄╴5╶┄┄┄┄┄┄╴6╶┄┄┄┄┄┄┄┤ +
-        │                 ​┆ ​                │ +
-        │        1        2        3        │ +
-        │                 ​┆ ​                │ +
-        └─────────────────┴─────────────────┘ +
-        The SubMap showing the widths +
-        ┌─────────────────┐ +
-        │                 │ +
-        │        1        │ +
-        │                 │ +
-        └─────────────────┘ +
-        ┌───────────────────────┐ +
-        │                       │ +
-        │           ​2 ​          │ +
-        │                       │ +
-        └───────────────────────┘ +
-        ┌───────────┐ +
-        │           │ +
-        │     ​3 ​    │ +
-        │           │ +
-        └───────────┘ +
-        """​ +
-        head = int(head) +
-        root_win = gdk.get_default_root_window() +
-        win_property = gdk.atom_intern("​_NET_WORKAREA"​) +
-        win_property_array = root_win.property_get(win_property)[2] +
-        x_offset = win_property_array[0] +
-        y_offset = win_property_array[1] +
-        x_wa = win_property_array[2] +
-        y_wa = win_property_array[3] +
-        x_sub_map = {1: x_wa / 2, 2: x_wa / 3 * 2, 3: x_wa / 3} +
-        if (head % 3) == 1: +
-            x = x_offset +
-            width = x_sub_map[sub] +
-        elif (head % 3) == 2: +
-            if sub == 1: +
-                x = x_offset +
-                width = x_wa +
-            else: +
-                x = x_wa / 3 + x_offset +
-                width = x_wa / 3 +
-        else: +
-             x = x_wa - x_sub_map[sub] + x_offset +
-             width = x_sub_map[sub] +
-        if (7 <= head <= 9): +
-            y = y_offset +
-            height = y_wa / 2 +
-        elif (4 <= head <= 6): +
-            y = y_offset +
-            height = y_wa +
-        else: +
-            y = y_wa / 2 + y_offset +
-            height = y_wa / 2 +
-        return(int(x),​ int(y), int(width), int(height)) +
-     +
-    def set_geometry(geo_list):​ +
-        """​ +
-        DOC: http://library.gnome.org/devel/libwnck/stable/​WnckWindow.html#​wnck-window-set-geometry +
-        gravity: 0   - current gravity +
-                 ​1 ​  - top left +
-                 ​2 ​  - top center ​        ​1 ​   2    3 +
-                 ​3 ​  - top right           ​┏━╾─┴─╼━┓ +
-                 ​4 ​  - center left         ​╿ ​      ╿ +
-                 ​5 ​  - center center ​     4┤   ​5 ​  ​├6 +
-                 ​6 ​  - center right        ╽       ╽ +
-                 ​7 ​  - bottom left         ​┗━╾─┬─╼━┛ +
-                 ​8 ​  - bottom center ​     7    8    9 +
-                 ​9 ​  - bottom right +
-                 ​10 ​ - static (top left) +
-        Only 10 does what I want… all the other gravities (even 1) don't set +
-        the windows right (Kind of bug? Maybe. Does it bother me? No, not really). +
-        """​ +
-        window = active_window() +
-        window.unmaximize_horizontally() +
-        window.unmaximize_vertically() +
-        window.set_geometry(10,​ 15, geo_list[0],​ geo_list[1],​ geo_list[2],​ geo_list[3]) +
-        return 0 +
-     +
-    def main(): +
-        args = argument_parser() +
-        if args.position == 0: +
-            print get_geometry() +
-            sys.exit(0) +
-        #​print('​%s'​ % active_window().get_data('​submap'​)) +
-        if active_window().get_data('​submap'​) == '​1':​ +
-            #​print('​Known state! Switch to SubMap 2!') +
-            set_geometry(window_state(args.position,​ 2)) +
-            active_window().set_data('​submap',​ 2) +
-        elif active_window().get_data('​submap'​) == '​2':​ +
-            if (args.position % 3) == 2: +
-                #​print('​Known state! Switch to SubMap 1!') +
-                set_geometry(window_state(args.position,​ 1)) +
-                active_window().set_data('​submap',​ 1) +
-            else: +
-                #​print('​Known state! Switch to SubMap 3!') +
-                set_geometry(window_state(args.position,​ 3)) +
-                active_window().set_data('​submap',​ 3) +
-        elif active_window().get_data('​submap'​) == '​3':​ +
-            #​print('​Known state! Switch to SubMap 1!') +
-            set_geometry(window_state(args.position,​ 1)) +
-            active_window().set_data('​submap',​ 1) +
-        else: +
-            set_geometry(window_state(args.position,​ 1)) +
-            active_window().set_data('​submap',​ 1) +
-            #​print('​%s'​ % active_window().get_data('​submap'​)) +
-        sys.exit((0)) +
-     +
-    if __name__ == '​__main__':​ +
-        main()+