diff options
-rw-r--r-- | freedowm.py | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/freedowm.py b/freedowm.py index 14edbc8..de8e03c 100644 --- a/freedowm.py +++ b/freedowm.py @@ -2,50 +2,38 @@ import sys from os import system -from Xlib.display import Display + from Xlib import X, XK +from Xlib.display import Display display = Display() num = display.get_display_name() -# Window raiser listener -display.screen().root.grab_key(display.keysym_to_keycode(XK.string_to_keysym("k")), - X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync) +# Keyboard listener +display.screen().root.grab_key(X.AnyKey, X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync) -# Terminal listener -display.screen().root.grab_key(display.keysym_to_keycode(XK.string_to_keysym("enter")), - X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync) +# Button (Mouse) listeners +display.screen().root.grab_button(X.AnyButton, X.Mod4Mask, 1, + X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask, + X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE) -# Dmenu listener -display.screen().root.grab_key(display.keysym_to_keycode(XK.string_to_keysym("d")), - X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync) +start = None -# Exit listener -display.screen().root.grab_key(display.keysym_to_keycode(XK.string_to_keysym("c")), - X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync) -# Window move listener -display.screen().root.grab_button(1, X.Mod4Mask, 1, - X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask, - X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE) +def is_key(key_name): + return event.type == X.KeyPress and event.detail == display.keysym_to_keycode(XK.string_to_keysym(key_name)) -# Window resize listener -display.screen().root.grab_button(3, X.Mod4Mask, 1, - X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask, - X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE) -start = None +def window_focused(): + return event.child != X.NONE + # Check for actions until exit while 1: event = display.next_event() - # Raise window under cursor (MOD + K) - if event.type == X.KeyPress and event.child != X.NONE and event.detail == 45: - event.child.configure(stack_mode=X.Above) - # Resize window (MOD + right click) - elif event.type == X.ButtonPress and event.child != X.NONE: + if event.type == X.ButtonPress and event.child != X.NONE: attribute = event.child.get_geometry() start = event @@ -57,22 +45,27 @@ while 1: x=attribute.x + (start.detail == 1 and xDiff or 0), y=attribute.y + (start.detail == 1 and yDiff or 0), width=max(1, attribute.width + (start.detail == 3 and xDiff or 0)), - height=max(1, attribute.height + (start.detail == 3 and yDiff or 0))) + height=max(1, attribute.height + (start.detail == 3 and yDiff or 0)) + ) + + # Raise window under cursor (MOD + K) + if is_key("k") and window_focused(): + event.child.configure(stack_mode=X.Above) - # Close program (MOD + Q) - elif event.type == X.KeyPress and event.child != X.NONE and event.detail == 24: + # Close window (MOD + Q) + elif is_key("q") and window_focused(): event.child.destroy() - # Open terminal (MOD + Enter) + # Open terminal (MOD + Enter) // X11's "enter" keysym is 0, but it's 36 elif event.type == X.KeyPress and event.detail == 36: system("st &") # Open dmenu (MOD + D) - elif event.type == X.KeyPress and event.detail == 40: + elif is_key("d"): system("dmenu_run &") # Exit window manager (MOD + C) - elif event.type == X.KeyPress and event.detail == 54: + elif is_key("c"): sys.exit() elif event.type == X.ButtonRelease: |