summaryrefslogtreecommitdiff
path: root/dmenu_raycast
diff options
context:
space:
mode:
authorWojciech Kwolek <wojciech@kwolek.io>2024-06-08 05:29:15 +0200
committerWojciech Kwolek <wojciech@kwolek.io>2024-06-08 05:29:15 +0200
commit9400a1b2eede87a2d953b0c754f9c2c96cfb34f8 (patch)
tree206ac808fc86f0dded4a20e8af2e2afda7b225ec /dmenu_raycast
initial commit
Diffstat (limited to 'dmenu_raycast')
-rwxr-xr-xdmenu_raycast44
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)