restore legacy, include shorcut scripts
This commit is contained in:
85
dmapp/dmos/cyclework.py
Normal file
85
dmapp/dmos/cyclework.py
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
# Define the list of workspaces to cycle through
|
||||
WORKSPACES = [3, 6, 7, 8]
|
||||
|
||||
LAST_WS_FILE = "/tmp/lastws"
|
||||
|
||||
|
||||
def get_current_workspace():
|
||||
result = subprocess.run(["wmctrl", "-d"], capture_output=True, text=True)
|
||||
lines = result.stdout.splitlines()
|
||||
|
||||
for line in lines:
|
||||
if "*" in line: # The active workspace has a '*' symbol
|
||||
try:
|
||||
current_workspace = int(line.split()[0]) + 1
|
||||
print(f"Current workspace detected: {current_workspace}")
|
||||
return current_workspace
|
||||
except (IndexError, ValueError):
|
||||
print("Error parsing current workspace.")
|
||||
return None
|
||||
|
||||
print("No active workspace found.")
|
||||
return None
|
||||
|
||||
|
||||
def switch_to_workspace(workspace):
|
||||
print(f"Switching to workspace {workspace}")
|
||||
subprocess.run(["wmctrl", "-s", str(workspace - 1)])
|
||||
save_last_used_workspace(workspace)
|
||||
|
||||
|
||||
def save_last_used_workspace(workspace):
|
||||
with open(LAST_WS_FILE, "w") as f:
|
||||
f.write(str(workspace))
|
||||
|
||||
|
||||
def get_last_used_workspace():
|
||||
if os.path.exists(LAST_WS_FILE):
|
||||
with open(LAST_WS_FILE, "r") as f:
|
||||
try:
|
||||
return int(f.read().strip())
|
||||
except ValueError:
|
||||
return WORKSPACES[0]
|
||||
return WORKSPACES[0]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
if len(sys.argv) < 2 or sys.argv[1] not in ["up", "down", "current"]:
|
||||
print("Usage: python cyclework.py [up|down|current]")
|
||||
sys.exit(1)
|
||||
|
||||
direction = sys.argv[1]
|
||||
current = get_current_workspace()
|
||||
|
||||
if current is None:
|
||||
sys.exit(1)
|
||||
|
||||
if direction == "current":
|
||||
if current in WORKSPACES:
|
||||
print("Already in a workspace in the cycle.")
|
||||
sys.exit(0)
|
||||
|
||||
last_used = get_last_used_workspace()
|
||||
print(f"Switching to last used workspace in cycle: {last_used}")
|
||||
switch_to_workspace(last_used)
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
index = WORKSPACES.index(current)
|
||||
except ValueError:
|
||||
print("Current workspace is not in the list.")
|
||||
sys.exit(1)
|
||||
|
||||
if direction == "up":
|
||||
index = (index + 1) % len(WORKSPACES)
|
||||
else: # direction == 'down'
|
||||
index = (index - 1) % len(WORKSPACES)
|
||||
|
||||
next_workspace = WORKSPACES[index]
|
||||
switch_to_workspace(next_workspace)
|
||||
Reference in New Issue
Block a user