mirror of
https://github.com/keanuplayz/dotfiles.git
synced 2024-08-15 02:33:12 +00:00
81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
|
import sys
|
||
|
import os
|
||
|
import subprocess
|
||
|
|
||
|
|
||
|
def platform_not_supported_error():
|
||
|
raise Exception("platform '{}' is not supported!".format(sys.platform))
|
||
|
|
||
|
|
||
|
def run_chooser(choices, prompt=None, async_read=False):
|
||
|
if sys.platform == "darwin":
|
||
|
process_args = ["choose", "-i"]
|
||
|
elif os.name == "posix":
|
||
|
process_args = ["rofi", "-dmenu", "-i", "-format", "i"]
|
||
|
if prompt is not None:
|
||
|
process_args += ["-p", prompt]
|
||
|
if async_read:
|
||
|
process_args += ["-async-pre-read", "0"]
|
||
|
else:
|
||
|
platform_not_supported_error()
|
||
|
|
||
|
chooser_process = subprocess.Popen(
|
||
|
process_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE
|
||
|
)
|
||
|
|
||
|
with chooser_process.stdin as pipe:
|
||
|
for choice in choices:
|
||
|
assert "\n" not in choice
|
||
|
pipe.write(choice.encode())
|
||
|
pipe.write(b"\n")
|
||
|
|
||
|
exit_code = chooser_process.wait()
|
||
|
if exit_code != 0:
|
||
|
raise Exception("chooser process failed with exit code {}".format(exit_code))
|
||
|
|
||
|
chosen_index = int(
|
||
|
# an extra newline is inserted by rofi for whatever reason
|
||
|
chooser_process.stdout.read().rstrip(b"\n")
|
||
|
)
|
||
|
|
||
|
return chosen_index
|
||
|
|
||
|
|
||
|
def send_notification(title, message, url=None):
|
||
|
if sys.platform == "darwin":
|
||
|
process_args = [
|
||
|
"terminal-notifier",
|
||
|
"-title",
|
||
|
title,
|
||
|
"-message",
|
||
|
message,
|
||
|
"-open",
|
||
|
]
|
||
|
if url is not None:
|
||
|
process_args += [url]
|
||
|
elif os.name == "posix":
|
||
|
process_args = [
|
||
|
"notify-send",
|
||
|
"--icon=utilities-terminal",
|
||
|
"--expire-time=3000",
|
||
|
title,
|
||
|
message,
|
||
|
]
|
||
|
else:
|
||
|
platform_not_supported_error()
|
||
|
|
||
|
subprocess.run(process_args, check=True)
|
||
|
|
||
|
|
||
|
def set_clipboard(text):
|
||
|
# TODO: somehow merge program selection with the logic in `zsh/functions.zsh`
|
||
|
if sys.platform == "darwin":
|
||
|
process_args = ["pbcopy"]
|
||
|
elif os.name == "posix":
|
||
|
process_args = ["xsel", "--clipboard", "--input"]
|
||
|
# process_args = ["xclip", "-in", "-selection", "clipboard"]
|
||
|
else:
|
||
|
platform_not_supported_error()
|
||
|
|
||
|
subprocess.run(process_args, input=text.encode(), check=True)
|