X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=lightcards%2Frunner.py;h=0bd560072b3b2720afd77d795db3f2bd9bf8ac33;hb=b43e50be2267001cd085bc5cd1be01a59a5eddea;hp=e0af7d9e24e00746ca683e49e0537aac67e98f57;hpb=3ffbf7f20f3bdb8a162e2ecab608ac0a013a4b3c;p=lightcards.git diff --git a/lightcards/runner.py b/lightcards/runner.py index e0af7d9..0bd5600 100644 --- a/lightcards/runner.py +++ b/lightcards/runner.py @@ -3,12 +3,11 @@ import argparse import curses -import os import pkg_resources from random import shuffle import sys -from . import parse, progress +from . import parse, progress, config from .display import Display, CursesError from .deck import Status @@ -18,16 +17,36 @@ def parse_args(): parser = argparse.ArgumentParser( description="Terminal flashcards from Markdown" ) + parser.add_argument( + "-c", + "--config", + metavar="config_file", + type=str, + default="/dev/null", + help="specify custom config file", + ) parser.add_argument( "-V", "--view", - metavar="view", + metavar="1-3", type=int, choices=range(1, 4), - default=1, - help="specify which view to start in (default = 1)", + help="specify which view to start in", + ) + parser.add_argument("inp", metavar="input_files", type=str, nargs="+") + parser.add_argument( + "-l", + "--lenient", + action="store_true", + help="don't raise exception if tables are malformed", + ) + parser.add_argument( + "-t", + "--table", + metavar="num_table", + type=int, + help="specify which table to use if multiple are given", ) - parser.add_argument("inp", metavar="input file", type=str, nargs=1) parser.add_argument( "-a", "--alphabetize", @@ -38,7 +57,7 @@ def parse_args(): "-p", "--purge", action="store_true", - help="don't check cached info before starting", + help="delete cache before starting", ) parser.add_argument( "-r", "--reverse", action="store_true", help="reverse card order" @@ -55,55 +74,59 @@ def parse_args(): return parser.parse_args() -def show(args, stack, headers): +def show(args, stack, headers, conf): """ Get objects from cache, manipulate deck according to passed arguments, and send it to the display functions """ # Purge caches if asked if args.purge: - progress.purge(stack) + progress.purge(get_orig()[1]) # Check for caches idx = Status() cache = progress.dive(get_orig()[1]) - if cache: + if cache and conf["cache"]: (stack) = cache # Manipulate deck - if args.shuffle: + if args.shuffle or conf["shuffle"]: shuffle(stack) - if args.alphabetize: + if args.alphabetize or conf["alphabetize"]: stack.sort(key=lambda x: x.front) - if args.reverse: + if args.reverse or conf["reverse"]: stack.reverse() + # Set view + if args.view: + view = args.view + else: + view = conf["default_view"] + # Send to display - win = Display(stack, headers, idx, args.view) + win = Display(stack, headers, idx, view, args, conf) try: curses.wrapper(win.run) except curses.error as e: raise CursesError() from e -def reparse(): - """Parse arguments and input file again""" - args = parse_args() - os.system(f"$EDITOR {args.inp[0]}"), - return parse.parse_html(parse.md2html(args.inp[0])) - - def get_orig(): """Return original header and stack""" return (headers, stack) def main(args=sys.argv): - sys.tracebacklimit = 0 args = parse_args() + conf = config.read_file(args.config) + + if not conf["debug"]: + sys.tracebacklimit = 0 + global headers, stack - (headers, stack) = parse.parse_html(parse.md2html(args.inp[0])) - show(args, stack, headers) + (headers, stack) = parse.parse_html(parse.md2html(args.inp), args, conf) + + show(args, stack, headers, conf) if __name__ == "__main__":