diff options
| author | Wojciech Kwolek <wojciech@kwolek.io> | 2024-06-08 05:29:15 +0200 |
|---|---|---|
| committer | Wojciech Kwolek <wojciech@kwolek.io> | 2024-06-08 05:29:15 +0200 |
| commit | 9400a1b2eede87a2d953b0c754f9c2c96cfb34f8 (patch) | |
| tree | 206ac808fc86f0dded4a20e8af2e2afda7b225ec /dmenu_raycast | |
initial commit
Diffstat (limited to 'dmenu_raycast')
| -rwxr-xr-x | dmenu_raycast | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/dmenu_raycast b/dmenu_raycast new file mode 100755 index 0000000..8e91f55 --- /dev/null +++ b/dmenu_raycast @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import json +import sys +import subprocess +from urllib.parse import urlencode, quote +import socket + +EXTENSION = "irth/dmenu" +COMMAND = "index" + +elements = list(sys.stdin) + + +server = socket.socket() +server.bind(("127.0.0.1", 0)) +server.listen(0) + +host, port = server.getsockname() + +arguments = { + "host": host, + "port": str(port), +} + +query = urlencode({"arguments": json.dumps(arguments)}, quote_via=quote) + +url = f"raycast://extensions/{EXTENSION}/{COMMAND}?{query}" + +subprocess.run(["open", url], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + +(conn, _) = server.accept() + +conn.send(f"{len(elements)}\n".encode("utf-8")) +for el in elements: + conn.send(f"{el.strip()}\n".encode("utf-8")) + +result = b"" +while len(data := conn.recv(1024)) != 0: + result += data + +final_result = result.decode("utf-8").strip() +if final_result == '': + exit(1) +print(final_result) |
