Text line picker
#!/usr/bin/env python
import argparse
from pathlib import Path
from pzp import pzp
from pzp.layout import list_layouts
from pzp.matcher import list_matchers
examples_dir = Path(__file__).parent
code_of_conduct = examples_dir.parent / "CODE_OF_CONDUCT.md"
class LineItem:
def __init__(self, i, line):
self.i = i
self.line = line
def __str__(self):
raise Exception("Missing format_fn")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--fullscreen", action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("-n", "--line-numbers", action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("--height", type=int)
parser.add_argument("--layout", choices=list_layouts(), default="reverse-list")
parser.add_argument("--matcher", choices=list_matchers(), default="extended")
args = parser.parse_args()
candidates = code_of_conduct.read_text().split("\n")
if args.line_numbers:
item = pzp(
candidates=[LineItem(i, line) for i, line in enumerate(candidates, start=1)],
layout=args.layout,
matcher=args.matcher,
fullscreen=args.fullscreen,
height=args.height,
format_fn=lambda item: f"{item.i:3d}: {item.line}",
)
item = item.line if item else None
else:
item = pzp(
candidates=candidates,
layout=args.layout,
matcher=args.matcher,
fullscreen=args.fullscreen,
height=args.height,
)
print(item)
if __name__ == "__main__":
main()