aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--freedowm.py59
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: