mirror of
https://github.com/starr-dusT/dotfiles.git
synced 2025-02-19 19:27:31 -08:00
48 lines
1.2 KiB
Bash
48 lines
1.2 KiB
Bash
#!/usr/bin/env python
|
|
|
|
import i3ipc
|
|
import sys
|
|
|
|
move_normal = {"h": "focus left",
|
|
"j": "focus down",
|
|
"k": "focus up",
|
|
"l": "focus right"}
|
|
|
|
move_tabbed = {"h": "focus parent; focus left",
|
|
"j": "focus right",
|
|
"k": "focus left",
|
|
"l": "focus parent; focus right"}
|
|
|
|
move_tabbed_single = {"h": "focus left",
|
|
"j": "focus right",
|
|
"k": "focus left",
|
|
"l": "focus right"}
|
|
|
|
def count_splits(node):
|
|
if node.layout == 'splitv' or node.layout == 'splith':
|
|
return 1 + sum(count_splits(n) for n in node.nodes)
|
|
else:
|
|
return sum(count_splits(n) for n in node.nodes)
|
|
|
|
i3 = i3ipc.Connection()
|
|
|
|
# Get the focused container
|
|
focused = i3.get_tree().find_focused()
|
|
|
|
# Get number of splits (v or h)
|
|
focused_workspace = focused.workspace()
|
|
num_splits = count_splits(focused_workspace)
|
|
|
|
# Get the layout of the parent container
|
|
layout = focused.parent.layout
|
|
|
|
print(num_splits, layout)
|
|
|
|
if layout == "tabbed":
|
|
if num_splits > 0:
|
|
i3.command(move_tabbed[sys.argv[1]])
|
|
else:
|
|
i3.command(move_tabbed_single[sys.argv[1]])
|
|
else:
|
|
i3.command(move_normal[sys.argv[1]])
|