summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/callbacks.py66
-rw-r--r--scripts/defaults.py8
2 files changed, 71 insertions, 3 deletions
diff --git a/scripts/callbacks.py b/scripts/callbacks.py
index 6c33bc77..f7cb37c1 100644
--- a/scripts/callbacks.py
+++ b/scripts/callbacks.py
@@ -209,7 +209,71 @@ def prev_desktop(data, no_wrap=0):
d = n - 1
change_desktop(data, d)
-def send_to_desktop(data, num):
+def up_desktop(data, num=1):
+ """Switches to the desktop vertically above the current one. This is based
+ on the desktop layout chosen by an EWMH compliant pager. Optionally, num
+ can be specified to move more than one row at a time."""
+ screen = ob.openbox.screen(data.screen)
+ d = screen.desktop()
+ n = screen.numDesktops()
+ l = screen.desktopLayout()
+
+ target = d - num * l.columns
+ if target < 0:
+ target += l.rows * l.columns
+ while target >= n:
+ target -= l.columns
+ change_desktop(data, target)
+
+def down_desktop(data, num=1):
+ """Switches to the desktop vertically below the current one. This is based
+ on the desktop layout chosen by an EWMH compliant pager. Optionally, num
+ can be specified to move more than one row at a time."""
+ screen = ob.openbox.screen(data.screen)
+ d = screen.desktop()
+ n = screen.numDesktops()
+ l = screen.desktopLayout()
+
+ target = d + num * l.columns
+ if target >= n:
+ target -= l.rows * l.columns
+ while target < 0:
+ target += l.columns
+ change_desktop(data, target)
+
+def left_desktop(data, num=1):
+ """Switches to the desktop horizotally left of the current one. This is
+ based on the desktop layout chosen by an EWMH compliant pager.
+ Optionally, num can be specified to move more than one column at a
+ time."""
+ screen = ob.openbox.screen(data.screen)
+ d = screen.desktop()
+ n = screen.numDesktops()
+ l = screen.desktopLayout()
+
+ rowstart = d - d % l.columns
+ target = d - num
+ while target < rowstart:
+ target += l.columns
+ change_desktop(data, target)
+
+def right_desktop(data, num=1):
+ """Switches to the desktop horizotally right of the current one. This is
+ based on the desktop layout chosen by an EWMH compliant pager.
+ Optionally, num can be specified to move more than one column at a
+ time."""
+ screen = ob.openbox.screen(data.screen)
+ d = screen.desktop()
+ n = screen.numDesktops()
+ l = screen.desktopLayout()
+
+ rowstart = d - d % l.columns
+ target = d + num
+ while target >= rowstart + l.columns:
+ target -= l.columns
+ change_desktop(data, target)
+
+def send_to_desktop(data, num=1):
"""Sends a client to a specified desktop"""
if not data.client: return
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
diff --git a/scripts/defaults.py b/scripts/defaults.py
index 04143e11..98c57ce5 100644
--- a/scripts/defaults.py
+++ b/scripts/defaults.py
@@ -53,9 +53,13 @@ ob.kbind(["C-2"], ob.KeyContext.All, lambda(d): callbacks.change_desktop(d, 1))
ob.kbind(["C-3"], ob.KeyContext.All, lambda(d): callbacks.change_desktop(d, 2))
ob.kbind(["C-4"], ob.KeyContext.All, lambda(d): callbacks.change_desktop(d, 3))
ob.kbind(["C-A-Right"], ob.KeyContext.All,
- lambda(d): callbacks.next_desktop(d))
+ lambda(d): callbacks.right_desktop(d))
ob.kbind(["C-A-Left"], ob.KeyContext.All,
- lambda(d): callbacks.prev_desktop(d))
+ lambda(d): callbacks.left_desktop(d))
+ob.kbind(["C-A-Up"], ob.KeyContext.All,
+ lambda(d): callbacks.up_desktop(d))
+ob.kbind(["C-A-Down"], ob.KeyContext.All,
+ lambda(d): callbacks.down_desktop(d))
ob.kbind(["C-S-A-Right"], ob.KeyContext.All,
lambda(d): callbacks.send_to_next_desktop(d))