diff --git a/x11/ahk.py b/x11/ahk.py new file mode 100755 index 0000000..e14f0b9 --- /dev/null +++ b/x11/ahk.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +import os, sys, subprocess +os.environ['DISPLAY'] = ':0' + +def cmd(*args): return subprocess.run([str(a) for a in args], capture_output=True, text=True).stdout.strip() + +def tile_window(position): + window_id = subprocess.run(['xdotool', 'getactivewindow'], + capture_output=True, text=True).stdout.strip() + + cmd('wmctrl', '-i', '-r', window_id, '-b', 'remove,maximized_vert,maximized_horz') + + if position == 'maximize': + cmd('wmctrl', '-i', '-r', window_id, '-b', 'add,maximized_vert,maximized_horz') + return + + SCREEN_WIDTH, SCREEN_HEIGHT, TASKBAR = 3840, 2160, 48 + work_height = SCREEN_HEIGHT - TASKBAR + quarter = SCREEN_WIDTH // 4 + positions = { + 'left': (0, 0, quarter, work_height), + 'center': (quarter, 0, quarter * 2, work_height), + 'right': (quarter * 3, 0, quarter, work_height), + } + x, y, width, height = positions[position] + if 'xfce4-terminal' in cmd('xprop', '-id', window_id, 'WM_CLASS').lower(): + height -= 10 + cmd('xdotool', 'windowsize', window_id, width, height) + cmd('xdotool', 'windowmove', window_id, x, y) + +def XButton1(): + for line in cmd('xdotool', 'getmouselocation', '--shell').splitlines(): + if 'WINDOW=' in line: + window = line.split('=')[1] + cmd('xdotool', 'windowactivate', '--sync', window) + classname = cmd('xdotool', 'getwindowclassname', window) + name = cmd('xdotool', 'getwindowname', window) + if classname == 'Xfce4-terminal': key = 'alt+F4' + elif name.startswith('New tab - obsidian'): key = 'alt+F4' + else: key = 'ctrl+w' + cmd('xdotool', 'key', key) + +def popup(message): cmd("zenity", "--info", f"--text={message}", "--timeout=1") + +def F1(): + import random,time + SCREEN_WIDTH, SCREEN_HEIGHT, TASKBAR = 3840, 2160, 48 + work_height = SCREEN_HEIGHT - TASKBAR + quarter = SCREEN_WIDTH // 4 + x, y, w, h = 0, 0, quarter, work_height + cmd("chromium-browser", + "--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled", "--new-window", "https://yauk.net") + time.sleep(0.1) + window_id = cmd('xdotool', 'getactivewindow') + + cmd('xdotool', 'windowsize', window_id, w, h) + cmd('xdotool', 'windowmove', window_id, x, y) + +def F12(): + if ret := subprocess.run(['wmctrl', '-x', '-a', 'obsidian']).returncode: + cmd('dbus-launch', 'flatpak', 'run', 'md.obsidian.Obsidian') + +def F10(): + cmd('killall', 'xbindkeys') + cmd('xbindkeys') + popup('Reload') + +def Win(): + cmd('xfce4-popup-whiskermenu') + +def Win_1(): + cmd("chromium-browser", + "--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled") + +if __name__ == '__main__': + match sys.argv[1]: + case 'Win+Up': tile_window('maximize') + case 'Win+Left': tile_window('left') + case 'Win+Down': tile_window('center') + case 'Win+Right': tile_window('right') + case 'Win': Win() + case 'Win+1': Win_1() + case 'F1': F1() + case "XButton1": XButton1() + case "XButton2": cmd("xdotool", "key", "ctrl+Tab") + case "F10": F10() + case "F12": F12() \ No newline at end of file diff --git a/x11/xbindkeysrc b/x11/xbindkeysrc new file mode 100644 index 0000000..33b8705 --- /dev/null +++ b/x11/xbindkeysrc @@ -0,0 +1,35 @@ +"ahk.py XButton1" + b:8 + +"ahk.py XButton2" + b:9 + +"xte 'keydown Control_L' 'keydown Shift_L' 'key Tab' 'keyup Shift_L' 'keyup Control_L'" + Shift + b:9 + +"ahk.py F12" + F12 + +"ahk.py F1" + F1 + +"ahk.py F10" + F10 + +"ahk.py Win+1" + Mod4 + 1 + +"ahk.py Win+Up" + Mod4 + Up + +"ahk.py Win+Left" + Mod4 + Left + +"ahk.py Win+Down" + Mod4 + Down + +"ahk.py Win+Right" + Mod4 + Right + +"ahk.py Win" + Alt + F1