bang: add an option to provide a default handle
This commit is contained in:
parent
ec545d5e11
commit
cdfae0009d
62
bang.py
62
bang.py
|
@ -72,7 +72,10 @@ def run_rofi(config, input_text="", title="bang", no_lines=False):
|
||||||
|
|
||||||
def open_bang(config, handle, query):
|
def open_bang(config, handle, query):
|
||||||
try:
|
try:
|
||||||
bang = next(bang for bang in config["bangs"] if handle == bang["handle"])
|
bang = next(
|
||||||
|
bang for bang in config["bangs"]
|
||||||
|
if handle == bang["handle"]
|
||||||
|
)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
print("Unknown handle.")
|
print("Unknown handle.")
|
||||||
return
|
return
|
||||||
|
@ -85,10 +88,33 @@ def open_bang(config, handle, query):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
ap = argparse.ArgumentParser()
|
ap = argparse.ArgumentParser()
|
||||||
ap.add_argument("-c", "--config", help="path to JSON config file")
|
ap.add_argument(
|
||||||
ap.add_argument("-l", "--list", action="store_true", help="show available bangs")
|
"-c",
|
||||||
ap.add_argument("-b", "--bang", nargs="+", help="launch with this bang already set")
|
"--config",
|
||||||
ap.add_argument("-f", "--queries-file", help="file with one bang argument per line")
|
help="path to JSON config file"
|
||||||
|
)
|
||||||
|
ap.add_argument(
|
||||||
|
"-l",
|
||||||
|
"--list",
|
||||||
|
action="store_true",
|
||||||
|
help="show available bangs"
|
||||||
|
)
|
||||||
|
ap.add_argument(
|
||||||
|
"-b",
|
||||||
|
"--bang",
|
||||||
|
nargs="+",
|
||||||
|
help="launch with this bang already set"
|
||||||
|
)
|
||||||
|
ap.add_argument(
|
||||||
|
"-f",
|
||||||
|
"--queries-file",
|
||||||
|
help="file with one bang argument per line"
|
||||||
|
)
|
||||||
|
ap.add_argument(
|
||||||
|
"-d",
|
||||||
|
"--default",
|
||||||
|
help="handle to use if the first word is not a known handle"
|
||||||
|
)
|
||||||
args = ap.parse_args()
|
args = ap.parse_args()
|
||||||
|
|
||||||
config = load_config()
|
config = load_config()
|
||||||
|
@ -107,26 +133,36 @@ def main():
|
||||||
except OSError:
|
except OSError:
|
||||||
exit("Can't load queries file.")
|
exit("Can't load queries file.")
|
||||||
|
|
||||||
# If a bang is specified on the command line, use it, optionally with its args.
|
handles = [
|
||||||
|
bang["handle"]
|
||||||
|
for bang in sorted(config["bangs"], key=lambda bang: bang["handle"])
|
||||||
|
]
|
||||||
|
|
||||||
|
# If a bang is specified on the command line, use it,
|
||||||
|
# optionally with its args.
|
||||||
if bang_args := args.bang:
|
if bang_args := args.bang:
|
||||||
handle = bang_args[0]
|
handle = bang_args[0]
|
||||||
if bang_args[1:]:
|
if bang_args[1:]:
|
||||||
queries.append(" ".join(bang_args[1:]))
|
queries.append(" ".join(bang_args[1:]))
|
||||||
# Else show a Rofi with the list of available bangs.
|
# Else show a Rofi with the list of available bangs.
|
||||||
else:
|
else:
|
||||||
process_input = "\n".join(
|
process_input = "\n".join(handles) + "\n"
|
||||||
i["handle"]
|
|
||||||
for i in sorted(config["bangs"], key=lambda bang: bang["handle"])
|
|
||||||
) + "\n"
|
|
||||||
output = run_rofi(config, input_text=process_input)
|
output = run_rofi(config, input_text=process_input)
|
||||||
parts = output.split(maxsplit=1)
|
parts = output.split(maxsplit=1)
|
||||||
if len(parts) < 1:
|
if len(parts) == 0:
|
||||||
exit("Bad Rofi output.")
|
exit("Bad Rofi output.")
|
||||||
|
|
||||||
handle = parts[0]
|
handle = parts[0]
|
||||||
if len(parts) > 1:
|
if handle not in handles and (default_handle := args.default):
|
||||||
|
handle = default_handle
|
||||||
|
if len(parts) == 1:
|
||||||
|
queries.append(parts[0])
|
||||||
|
|
||||||
|
if len(parts) == 2:
|
||||||
queries.append(parts[1])
|
queries.append(parts[1])
|
||||||
|
|
||||||
# If no queries were obtained during options parsing, show Rofi now to get a single query.
|
# If no queries were obtained during options parsing,
|
||||||
|
# show Rofi now to get a single query.
|
||||||
if not queries:
|
if not queries:
|
||||||
queries.append(run_rofi(config, title=handle, no_lines=True))
|
queries.append(run_rofi(config, title=handle, no_lines=True))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue