#!/usr/bin/env python3 """ft-float: talk to ft-floatd (floating windows in the Frametop desktop). ft-float float [ID|active] float a window (default: the active one; for it, a toggle) ft-float float pointer the float key: float the window under the pointer (else the active one), or put it back if it floats ft-float dock [ID|active] put a floating window back on the desktop ft-float dock all put every floating window back ft-float launch APP start an app (its desktop file name, e.g. org.kde.dolphin) and float its first window where that app last floated ft-float run COMMAND [ARG...] the same for a command ft-float close ID close a window ft-float list the spare outputs and what floats on them FT_FLOAT_SOCKET names ft-floatd's socket (default frametop_float). """ import json import os import socket import sys if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"): sys.exit(__doc__) s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) s.bind("") s.settimeout(5) try: text = "run " + json.dumps(sys.argv[2:]) if sys.argv[1] == "run" else " ".join(sys.argv[1:]) s.sendto(text.encode(), "\0" + os.environ.get("FT_FLOAT_SOCKET", "frametop_float")) reply = s.recv(8192).decode() except OSError as e: sys.exit(f"ft-floatd didn't answer ({e}); is the Frametop desktop running?") print(reply) sys.exit(0 if reply.startswith("ok") else 1)