]> git.armaanb.net Git - lightcards.git/blob - lightcards/lightcards.py
Add keybinding to open file in editor
[lightcards.git] / lightcards / lightcards.py
1 #!/usr/bin/env python
2 # Markdown flashcard utility
3 # Armaan Bhojwani 2021
4
5 import argparse
6 from curses import wrapper
7 import os
8 from random import shuffle
9 import sys
10
11 from . import display, parse
12 from .deck import Status
13
14
15 def parse_args():
16     parser = argparse.ArgumentParser(description="Terminal flashcards from Markdown")
17     parser.add_argument("inp",
18                         metavar="input file",
19                         type=str,
20                         nargs=1)
21     parser.add_argument("-f", "--flip",
22                         action='store_true',
23                         help="show second column first")
24     parser.add_argument("-r", "--reverse",
25                         action='store_true',
26                         help="reverse card order")
27     parser.add_argument("-s", "--shuffle",
28                         action='store_true',
29                         help="shuffle card order")
30     parser.add_argument("-v", "--version",
31                         action='version',
32                         version="lightcards 0.3.0")
33     return parser.parse_args()
34
35
36 def show(args, stack, headers):
37     """
38     Manipulate deck according to passed arguments, and send it to the display
39     functions
40     """
41     idx = Status()
42     if args.flip:
43         for x in stack:
44             x[0], x[1] = x[1], x[0]
45         headers[0], headers[1] = headers[1], headers[0]
46     if args.shuffle:
47         shuffle(stack)
48     elif args.reverse:
49         stack.reverse()
50     wrapper(display.init_disp, stack, headers, idx)
51
52
53 def reparse():
54     args = parse_args()
55     os.system(f"$EDITOR {args.inp[0]}"),
56     return parse.parse_html(parse.md2html(args.inp[0]))
57
58
59 def main(args=sys.argv):
60     args = parse_args()
61     (headers, stack) = parse.parse_html(parse.md2html(args.inp[0]))
62     show(args, stack, headers)
63
64
65 if __name__ == "__main__":
66     main()