INIT!
This commit is contained in:
Executable
+81
@@ -0,0 +1,81 @@
|
||||
# implementation of swaysome in python
|
||||
import sys
|
||||
from dataclasses import dataclass
|
||||
from swayipc import Swayipc, Output, Workspace
|
||||
import pathlib
|
||||
class SwaySome(Swayipc):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def _cmd(self, cmd_str):
|
||||
self.cmd(cmd_str)
|
||||
|
||||
def ordered_outputs(self):
|
||||
outs = self.outputs()
|
||||
outs.sort(key=lambda o: o.name)
|
||||
return outs
|
||||
|
||||
def current_workspace(self):
|
||||
outs = self.outputs()
|
||||
wss = self.workspaces()
|
||||
|
||||
focused_output = next((o.name for o in outs if o.focused), None)
|
||||
if not focused_output:
|
||||
raise RuntimeError("No focused output")
|
||||
|
||||
for ws in wss:
|
||||
if ws.visible and ws.output == focused_output:
|
||||
return ws.num
|
||||
|
||||
raise RuntimeError("No active workspace found")
|
||||
|
||||
def group_base(self):
|
||||
return (self.current_workspace() // 10) * 10
|
||||
|
||||
def resolve(self, n: int):
|
||||
return self.group_base() + n
|
||||
|
||||
def focus(self, n: int):
|
||||
self._cmd(f"workspace number {self.resolve(n)}")
|
||||
|
||||
def move(self, n: int):
|
||||
self._cmd(f"move container to workspace number {self.resolve(n)}")
|
||||
|
||||
def focus_abs(self, n: int):
|
||||
self._cmd(f"workspace number {n}")
|
||||
|
||||
def move_abs(self, n: int):
|
||||
self._cmd(f"move container to workspace number {n}")
|
||||
|
||||
def init(self, n: int):
|
||||
outputs = self.ordered_outputs()
|
||||
current = next((o.name for o in outputs if o.focused), None)
|
||||
|
||||
for i, out in enumerate(outputs):
|
||||
target = ((i + 1) * 10) + n
|
||||
self._cmd(f"focus output {out.name}")
|
||||
self._cmd(f"workspace number {target}")
|
||||
|
||||
if current:
|
||||
self._cmd(f"focus output {current}")
|
||||
|
||||
def main():
|
||||
cmd = sys.argv[1]
|
||||
n = int(sys.argv[2])
|
||||
|
||||
sway = SwaySome()
|
||||
|
||||
if cmd == "focus":
|
||||
sway.focus(n)
|
||||
elif cmd == "move":
|
||||
sway.move(n)
|
||||
elif cmd == "focus-abs":
|
||||
sway.focus_abs(n)
|
||||
elif cmd == "move-abs":
|
||||
sway.move_abs(n)
|
||||
else:
|
||||
print(f"Unknown command: {cmd}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user