Xfce Wiki

Sub domains
 

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
windowgrid [2011/12/13 17:49] killermoehrewindowgrid [2012/08/05 09:57] killermoehre
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 Window-Grid-PlugIn for Compiz (Link needed) features this python-script some placing capabilities.
 +   
 TODO: TODO:
-  * wrote the help 
   * 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
   * hope for fixing of [[https://bugzilla.xfce.org/show_bug.cgi?id=4178|this]] bug   * hope for fixing of [[https://bugzilla.xfce.org/show_bug.cgi?id=4178|this]] bug
Line 10: Line 9:
  
 ---- ----
- 
     #!/usr/bin/python2     #!/usr/bin/python2
     # -*- coding: utf-8 -*-     # -*- coding: utf-8 -*-
          
     import sys     import sys
-    import os+    import argparse 
 +    from gtk import gdk
     import wnck     import wnck
-    from Xlib import display 
          
     PACKAGE = "window_grid"     PACKAGE = "window_grid"
          
-    def _help_(): +    def argument_parser(): 
-        print(u'Help:') +        """ 
-        print(u'Lorem ipsum dolores…') +        The argument parser. Takes only one number from the cmd line in the range of 
-        return(0)+        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():     def active_window():
-        # returns the default screen, but it fails when not called from X +        """ 
-        # TODO: connect to the dbus-session-bus to get the right environment +        Returns the default screen, but it fails uncatchable when not called from X. 
-        # (like $DISPLAY)+        """
         screen = wnck.screen_get_default()         screen = wnck.screen_get_default()
         screen.force_update()         screen.force_update()
-        return(screen.get_active_window()) +        return(screen.get_active_window()) 
-     +
-    def get_resolution(orientation): +
-        # Accept only 'width' and 'height' for the specific resolution +
-        return display.Display.screen(display.Display())[orientation + +
-           '_in_pixels']+
          
     def get_geometry():     def get_geometry():
Line 44: Line 46:
          
     def window_state(head, sub = int(1)):     def window_state(head, sub = int(1)):
-        The HeadMap showing the screen; 4, 5 and 6 are vertical full, +        """ 
-        #                                 2, 5 and 8 are horizontal full. +        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╶┄┄┄┄┄┄┄┤ +        │        7        8        9        │ 
-        │                 ┆                 │ +        │                 ┆                 │ 
-        │        1        2        3        │ +        ├┄┄┄┄┄┄┄╴4╶┄┄┄┄┄┄╴5╶┄┄┄┄┄┄╴6╶┄┄┄┄┄┄┄┤ 
-        │                 ┆                 │ +        │                 ┆                 │ 
-        └─────────────────┴─────────────────┘ +        │        1        2        3        │ 
-        The SubMap showing the widths +        │                 ┆                 │ 
-        ┌─────────────────┐ +        └─────────────────┴─────────────────┘ 
-        │                 │ +        The SubMap showing the widths 
-        │        1        │ +        ┌─────────────────┐ 
-        │                 │ +        │                 │ 
-        └─────────────────┘ +        │        1        │ 
-        ┌───────────────────────┐ +        │                 │ 
-        │                       │ +        └─────────────────┘ 
-        │                     │ +        ┌───────────────────────┐ 
-        │                       │ +        │                       │ 
-        └───────────────────────┘ +        │                     │ 
-        ┌───────────┐ +        │                       │ 
-        │           │ +        └───────────────────────┘ 
-        │         │ +        ┌───────────┐ 
-        │           │ +        │           │ 
-        └───────────┘+        │         │ 
 +        │           │ 
 +        └───────────┘ 
 +        """
         head = int(head)         head = int(head)
-        x_res get_resolution(u'width'+        root_win gdk.get_default_root_window() 
-        y_res get_resolution(u'height'+        win_property gdk.atom_intern("_NET_WORKAREA") 
-        x_sub_map = {1: x_res / 2, 2: x_res / 3 * 2, 3: x_res / 3}+        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:         if (head % 3) == 1:
-            x = 0+            x = x_offset
             width = x_sub_map[sub]             width = x_sub_map[sub]
         elif (head % 3) == 2:         elif (head % 3) == 2:
             if sub == 1:             if sub == 1:
-                x = 0 +                x = x_offset 
-                width = x_res+                width = x_wa
             else:             else:
-                x = x_res / 3 +                x = x_wa / 3 + x_offset 
-                width = x_res / 3+                width = x_wa / 3
         else:         else:
-            x = x_res - x_sub_map[sub] +             x = x_wa - x_sub_map[sub] + x_offset 
-            width = x_sub_map[sub]+             width = x_sub_map[sub]
         if (7 <= head <= 9):         if (7 <= head <= 9):
-            y = 0 +            y = y_offset 
-            height = y_res / 2+            height = y_wa / 2
         elif (4 <= head <= 6):         elif (4 <= head <= 6):
-            y = 0 +            y = y_offset 
-            height = y_res+            height = y_wa
         else:         else:
-            y = y_res / 2 +            y = y_wa / 2 + y_offset 
-            height = y_res / 2+            height = y_wa / 2
         return(int(x), int(y), int(width), int(height))         return(int(x), int(y), int(width), int(height))
          
     def set_geometry(geo_list):     def set_geometry(geo_list):
-        DOC: http://library.gnome.org/devel/libwnck/stable/WnckWindow.html +        """ 
-        #      #wnck-window-set-geometry +        DOC: http://library.gnome.org/devel/libwnck/stable/WnckWindow.html#wnck-window-set-geometry 
-        gravity:  0   - current gravity +        gravity: 0   - current gravity 
-        #           1   - top left +                 1   - top left 
-        #           2   - top center                    +                 2   - top center               
-        #           3   - top right               ┏━╾─┴─╼━┓ +                 3   - top right           ┏━╾─┴─╼━┓ 
-        #           4   - center left             ╿       ╿ +                 4   - center left         ╿       ╿ 
-        #           5   - center center         4 ┤     ├ 6 +                 5   - center center      4┤     ├6 
-        #           6   - center right            ╽       ╽ +                 6   - center right        ╽       ╽ 
-        #           7   - bottom left             ┗━╾─┬─╼━┛ +                 7   - bottom left         ┗━╾─┬─╼━┛ 
-        #           8   - bottom center                 +                 8   - bottom center            
-        #           9   - bottom right +                 9   - bottom right 
-        #           10  - static (top left) +                 10  - static (top left) 
-        # only 10 does what I want… all the other gravities (even 1) don't set +        Only 10 does what I want… all the other gravities (even 1) don't set 
-        the windows right +        the windows right (Kind of bug? Maybe. Does it bother me? No, not really). 
-        active_window().unmaximize_horizontally() +        """ 
-        active_window().unmaximize_vertically() +        window = active_window() 
-        active_window().set_geometry(10, 15, geo_list[0], geo_list[1], geo_list[2], geo_list[3])+        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         return 0
-        +    
     def main():     def main():
-        if len(sys.argv) > 2: +        args = argument_parser() 
-            print('Too many arguments! Only one allowed!'+        if args.position == 0:
-            _help_() +
-            sys.exit(1+
-        if len(sys.argv) < 2: +
-            print('Too few arguments! At least one required!'+
-            _help_() +
-            sys.exit(1) +
-        try: +
-            cmd_arg = int(str(sys.argv[1])) +
-        except ValueError: +
-            print('Wrong argument!'+
-            _help_() +
-            sys.exit(1) +
-        if cmd_arg == 0:+
             print get_geometry()             print get_geometry()
             sys.exit(0)             sys.exit(0)
-        print('%s' % active_window().get_data('submap'))+        #print('%s' % active_window().get_data('submap'))
         if active_window().get_data('submap') == '1':         if active_window().get_data('submap') == '1':
-            print('Known state! Switch to SubMap 2!') +            #print('Known state! Switch to SubMap 2!') 
-            set_geometry(window_state(cmd_arg, 2))+            set_geometry(window_state(args.position, 2))
             active_window().set_data('submap', 2)             active_window().set_data('submap', 2)
         elif active_window().get_data('submap') == '2':         elif active_window().get_data('submap') == '2':
-            if (cmd_arg % 3) == 2: +            if (args.position % 3) == 2: 
-                print('Known state! Switch to SubMap 1!') +                #print('Known state! Switch to SubMap 1!') 
-                set_geometry(window_state(cmd_arg, 1))+                set_geometry(window_state(args.position, 1))
                 active_window().set_data('submap', 1)                 active_window().set_data('submap', 1)
             else:             else:
-                print('Known state! Switch to SubMap 3!') +                #print('Known state! Switch to SubMap 3!') 
-                set_geometry(window_state(cmd_arg, 3))+                set_geometry(window_state(args.position, 3))
                 active_window().set_data('submap', 3)                 active_window().set_data('submap', 3)
         elif active_window().get_data('submap') == '3':         elif active_window().get_data('submap') == '3':
-            print('Known state! Switch to SubMap 1!') +            #print('Known state! Switch to SubMap 1!') 
-            set_geometry(window_state(cmd_arg, 1))+            set_geometry(window_state(args.position, 1))
             active_window().set_data('submap', 1)             active_window().set_data('submap', 1)
         else:         else:
-            set_geometry(window_state(cmd_arg, 1))+            set_geometry(window_state(args.position, 1))
             active_window().set_data('submap', 1)             active_window().set_data('submap', 1)
-        print('%s' % active_window().get_data('submap')) +            #print('%s' % active_window().get_data('submap')) 
-        sys.exit(0)+        sys.exit((0))
          
     if __name__ == '__main__':     if __name__ == '__main__':
         main()         main()