From 81c164bbf9ed2462e5f9fb7599fa6f0279a087fa Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 10 Feb 2003 16:12:33 +0000 Subject: add support for desktop layouts specified by pagers --- scripts/callbacks.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++- scripts/defaults.py | 8 +++++-- 2 files changed, 71 insertions(+), 3 deletions(-) (limited to 'scripts') 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)) -- cgit v1.2.3