You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.5 KiB
47 lines
1.5 KiB
#!/usr/bin/env python3 |
|
|
|
import fileinput |
|
import configparser |
|
import os.path |
|
import subprocess |
|
|
|
# Get the config standard locations |
|
config_locations = subprocess.check_output(['qtpaths', '--paths', 'ConfigLocation']).decode('utf-8').strip().split(':') |
|
config_paths = [os.path.join(folder, 'kwinrc') for folder in config_locations] |
|
|
|
# Get the desktops information from `kwinrc` config file |
|
kwinrc = configparser.ConfigParser(strict=False, allow_no_value=True) |
|
kwinrc.read(config_paths) |
|
|
|
num_desktops = int(kwinrc.get('Desktops', 'Number', fallback='')) |
|
|
|
# Generete the map from x11ids (ennumeration) to UUIDs |
|
desktopUUIDs = { -1: "" } # NET::OnAllDesktops -> Empty string |
|
for i in range(1, num_desktops + 1): |
|
uuid = kwinrc.get('Desktops', f'Id_{i}', fallback='') |
|
desktopUUIDs[i] = str(uuid) |
|
|
|
# Apply the conversion to `kwinrulesrc` |
|
for line in fileinput.input(): |
|
# Rename key `desktoprule` to `desktopsrule` |
|
if line.startswith("desktoprule="): |
|
value = line[len("desktoprule="):].strip() |
|
print("desktopsrule=" + value) |
|
print("# DELETE desktoprule") |
|
continue |
|
|
|
if not line.startswith("desktop="): |
|
print(line.strip()) |
|
continue |
|
|
|
# Convert key `desktop` (x11id) to `desktops` (list of UUIDs) |
|
try: |
|
value = line[len("desktop="):].strip() |
|
x11id = int(value) |
|
uuid = desktopUUIDs[x11id] |
|
except: |
|
print(line.strip()) # If there is some error, print back the line |
|
continue |
|
|
|
print("desktops=" + uuid) |
|
print("# DELETE desktop")
|
|
|