36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
import argparse
|
|
from importlib.metadata import version
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(prog="bw-menu")
|
|
parser.add_argument(
|
|
"--version", action="version", version=f"%(prog)s {version('bw-menu')}"
|
|
)
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
# select subcommand
|
|
select_parser = subparsers.add_parser("select")
|
|
select_parser.add_argument("--selector", default="rofi", choices=["rofi", "fzf"])
|
|
select_parser.add_argument(
|
|
"--field", default="password", choices=["username", "password", "totp", "name"]
|
|
)
|
|
select_parser.add_argument("--print", dest="print_result", action="store_true")
|
|
# rofi script-mode passes the selected title as a positional arg — accept and ignore it
|
|
select_parser.add_argument("_rofi_arg", nargs="?", help=argparse.SUPPRESS)
|
|
|
|
# history subcommand
|
|
history_parser = subparsers.add_parser("history")
|
|
history_sub = history_parser.add_subparsers(dest="history_command", required=True)
|
|
|
|
history_sub.add_parser("list")
|
|
|
|
get_parser = history_sub.add_parser("get")
|
|
get_parser.add_argument("index", type=int)
|
|
get_parser.add_argument(
|
|
"--field", default="password", choices=["username", "password", "totp", "name"]
|
|
)
|
|
get_parser.add_argument("--print", dest="print_result", action="store_true")
|
|
|
|
return parser.parse_args()
|