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):
|
||||
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"]
|
||||
elif os.name == "posix":
|
||||
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:
|
||||
for choice in choices:
|
||||
for index, choice in enumerate(choices):
|
||||
assert "\n" not in choice
|
||||
if not supports_result_index:
|
||||
pipe.write(str(index).encode())
|
||||
pipe.write(b" ")
|
||||
pipe.write(choice.encode())
|
||||
pipe.write(b"\n")
|
||||
|
||||
|
@ -39,11 +52,7 @@ def run_chooser(choices, prompt=None, async_read=False):
|
|||
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")
|
||||
)
|
||||
|
||||
chosen_index = int(chooser_process.stdout.read().strip().split()[0])
|
||||
return chosen_index
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue