]> Dogcows Code - chaz/openbox/blob - scripts/builtins.py
add a -single argument which only runs on a single screen
[chaz/openbox] / scripts / builtins.py
1 ###########################################################################
2 ### Functions that can be used as callbacks for mouse/keyboard bindings ###
3 ###########################################################################
4
5 def close(data):
6 """Closes the window on which the event occured"""
7 client = Openbox_findClient(openbox, data.window())
8 if client: OBClient_close(client)
9
10 def focus(data):
11 """Focuses the window on which the event occured"""
12 client = Openbox_findClient(openbox, data.window())
13 if not client: return
14 type = OBClient_type(client)
15 # !normal windows dont get focus from window enter events
16 if data.action() == EventEnterWindow and not OBClient_normal(client):
17 return
18 OBClient_focus(client)
19
20 def move(data):
21 """Moves the window interactively. This should only be used with
22 MouseMotion events"""
23 client = Openbox_findClient(openbox, data.window())
24 if not client: return
25
26 # !normal windows dont get moved
27 if not OBClient_normal(client): return
28
29 dx = data.xroot() - data.pressx()
30 dy = data.yroot() - data.pressy()
31 OBClient_move(client, data.press_clientx() + dx, data.press_clienty() + dy)
32
33 def resize(data):
34 """Resizes the window interactively. This should only be used with
35 MouseMotion events"""
36 client = Openbox_findClient(openbox, data.window())
37 if not client: return
38
39 # !normal windows dont get moved
40 if not OBClient_normal(client): return
41
42 px = data.pressx()
43 py = data.pressy()
44 dx = data.xroot() - px
45 dy = data.yroot() - py
46
47 # pick a corner to anchor
48 if not (resize_nearest or data.context() == MC_Grip):
49 corner = OBClient_TopLeft
50 else:
51 x = px - data.press_clientx()
52 y = py - data.press_clienty()
53 if y < data.press_clientheight() / 2:
54 if x < data.press_clientwidth() / 2:
55 corner = OBClient_BottomRight
56 dx *= -1
57 else:
58 corner = OBClient_BottomLeft
59 dy *= -1
60 else:
61 if x < data.press_clientwidth() / 2:
62 corner = OBClient_TopRight
63 dx *= -1
64 else:
65 corner = OBClient_TopLeft
66
67 OBClient_resize(client, corner,
68 data.press_clientwidth() + dx,
69 data.press_clientheight() + dy);
70
71 def restart(data):
72 """Restarts openbox"""
73 Openbox_restart(openbox, "")
74
75 def raise_win(data):
76 """Raises the window on which the event occured"""
77 client = Openbox_findClient(openbox, data.window())
78 if not client: return
79 screen = Openbox_screen(openbox, OBClient_screen(client))
80 OBScreen_restack(screen, 1, client)
81
82 def lower_win(data):
83 """Lowers the window on which the event occured"""
84 client = Openbox_findClient(openbox, data.window())
85 if not client: return
86 screen = Openbox_screen(openbox, OBClient_screen(client))
87 OBScreen_restack(screen, 0, client)
88
89 def toggle_shade(data):
90 """Toggles the shade status of the window on which the event occured"""
91 client = Openbox_findClient(openbox, data.window())
92 if not client: return
93 print "toggle_shade"
94 OBClient_shade(client, not OBClient_shaded(client))
95
96 def shade(data):
97 """Shades the window on which the event occured"""
98 client = Openbox_findClient(openbox, data.window())
99 if not client: return
100 OBClient_shade(client, 1)
101
102 def unshade(data):
103 """Unshades the window on which the event occured"""
104 client = Openbox_findClient(openbox, data.window())
105 if not client: return
106 OBClient_shade(client, 0)
107
108 def change_desktop(data, num):
109 """Switches to a specified desktop"""
110 root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
111 send_client_msg(root, OBProperty_net_current_desktop, root, num)
112
113 def next_desktop(data, no_wrap=0):
114 """Switches to the next desktop, optionally (by default) cycling around to
115 the first when going past the last."""
116 screen = Openbox_screen(openbox, data.screen())
117 d = OBScreen_desktop(screen)
118 n = OBScreen_numDesktops(screen)
119 if (d < (n-1)):
120 d = d + 1
121 elif not no_wrap:
122 d = 0
123 change_desktop(data, d)
124
125 def prev_desktop(data, no_wrap=0):
126 """Switches to the previous desktop, optionally (by default) cycling around
127 to the last when going past the first."""
128 screen = Openbox_screen(openbox, data.screen())
129 d = OBScreen_desktop(screen)
130 n = OBScreen_numDesktops(screen)
131 if (d > 0):
132 d = d - 1
133 elif not no_wrap:
134 d = n - 1
135 change_desktop(data, d)
136
137 def send_to_desktop(data, num):
138 """Sends a client to a specified desktop"""
139 root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
140 client = Openbox_findClient(openbox, data.window())
141 if client:
142 window = OBClient_window(client)
143 send_client_msg(root, OBProperty_net_wm_desktop, window, num)
144
145 def send_to_next_desktop(data, no_wrap=0, follow=1):
146 """Sends a window to the next desktop, optionally (by default) cycling
147 around to the first when going past the last. Also optionally moving to
148 the new desktop after sending the window."""
149 client = Openbox_findClient(openbox, data.window())
150 if not client: return
151 screen = Openbox_screen(openbox, data.screen())
152 d = OBScreen_desktop(screen)
153 n = OBScreen_numDesktops(screen)
154 if (d < (n-1)):
155 d = d + 1
156 elif not no_wrap:
157 d = 0
158 send_to_desktop(data, d)
159 if follow:
160 change_desktop(data, d)
161
162 def send_to_prev_desktop(data, no_wrap=0, follow=1):
163 """Sends a window to the previous desktop, optionally (by default) cycling
164 around to the last when going past the first. Also optionally moving to
165 the new desktop after sending the window."""
166 client = Openbox_findClient(openbox, data.window())
167 if not client: return
168 screen = Openbox_screen(openbox, data.screen())
169 d = OBScreen_desktop(screen)
170 n = OBScreen_numDesktops(screen)
171 if (d > 0):
172 d = d - 1
173 elif not no_wrap:
174 d = n - 1
175 send_to_desktop(data, d)
176 if follow:
177 change_desktop(data, d)
178
179 def state_above(data, add=2):
180 """Toggles, adds or removes the 'above' state on a window."""
181 client = Openbox_findClient(openbox, data.window())
182 if not client: return
183 root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
184 window = OBClient_window(client)
185 send_client_msg(root, OBProperty_net_wm_state, window, add,
186 OBProperty_net_wm_state_above)
187
188 def state_below(data, add=2):
189 """Toggles, adds or removes the 'below' state on a window."""
190 client = Openbox_findClient(openbox, data.window())
191 if not client: return
192 root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
193 window = OBClient_window(client)
194 print OBProperty_net_wm_state_below
195 send_client_msg(root, OBProperty_net_wm_state, window, add,
196 OBProperty_net_wm_state_below)
197
198 #########################################
199 ### Convenience functions for scripts ###
200 #########################################
201
202 def execute(bin, screen = 0):
203 """Executes a command on the specified screen. It is recommended that you
204 use this call instead of a python system call. If the specified screen
205 is beyond your range of screens, the default is used instead."""
206 Openbox_execute(openbox, screen, bin)
207
208 print "Loaded builtins.py"
This page took 0.043972 seconds and 5 git commands to generate.