mirror of
https://github.com/keanuplayz/dotfiles.git
synced 2024-08-15 02:33:12 +00:00
[common_script_utils] add support for using fzf as a chooser
Among other things this means that the emote copier is finally supported on Android.
This commit is contained in:
parent
855538c921
commit
fa2406e572
1 changed files with 16 additions and 7 deletions
|
@ -14,7 +14,17 @@ def platform_not_supported_error():
|
||||||
|
|
||||||
|
|
||||||
def run_chooser(choices, prompt=None, async_read=False):
|
def run_chooser(choices, prompt=None, async_read=False):
|
||||||
if sys.platform == "darwin":
|
supports_result_index = True
|
||||||
|
if os.isatty(sys.stderr.fileno()):
|
||||||
|
process_args = [
|
||||||
|
"fzf",
|
||||||
|
"--with-nth=2..",
|
||||||
|
"--height=50%",
|
||||||
|
"--reverse",
|
||||||
|
"--tiebreak=index",
|
||||||
|
]
|
||||||
|
supports_result_index = False
|
||||||
|
elif sys.platform == "darwin":
|
||||||
process_args = ["choose", "-i"]
|
process_args = ["choose", "-i"]
|
||||||
elif os.name == "posix":
|
elif os.name == "posix":
|
||||||
process_args = ["rofi", "-dmenu", "-i", "-format", "i"]
|
process_args = ["rofi", "-dmenu", "-i", "-format", "i"]
|
||||||
|
@ -30,8 +40,11 @@ def run_chooser(choices, prompt=None, async_read=False):
|
||||||
)
|
)
|
||||||
|
|
||||||
with chooser_process.stdin as pipe:
|
with chooser_process.stdin as pipe:
|
||||||
for choice in choices:
|
for index, choice in enumerate(choices):
|
||||||
assert "\n" not in choice
|
assert "\n" not in choice
|
||||||
|
if not supports_result_index:
|
||||||
|
pipe.write(str(index).encode())
|
||||||
|
pipe.write(b" ")
|
||||||
pipe.write(choice.encode())
|
pipe.write(choice.encode())
|
||||||
pipe.write(b"\n")
|
pipe.write(b"\n")
|
||||||
|
|
||||||
|
@ -39,11 +52,7 @@ def run_chooser(choices, prompt=None, async_read=False):
|
||||||
if exit_code != 0:
|
if exit_code != 0:
|
||||||
raise Exception("chooser process failed with exit code {}".format(exit_code))
|
raise Exception("chooser process failed with exit code {}".format(exit_code))
|
||||||
|
|
||||||
chosen_index = int(
|
chosen_index = int(chooser_process.stdout.read().strip().split()[0])
|
||||||
# an extra newline is inserted by rofi for whatever reason
|
|
||||||
chooser_process.stdout.read().rstrip(b"\n")
|
|
||||||
)
|
|
||||||
|
|
||||||
return chosen_index
|
return chosen_index
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue