From 8413a396838f01c3bd87876bcf4e5e94a65ba0d2 Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani Date: Sun, 31 Jan 2021 21:22:55 -0500 Subject: [PATCH] Make control menu always accessible with "m" --- lightcards/display.py | 70 ++++++++++++++++++++++++++++--------------- man/lightcards.1 | 3 ++ man/lightcards.1.md | 3 ++ 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/lightcards/display.py b/lightcards/display.py index ca6744a..940d15e 100644 --- a/lightcards/display.py +++ b/lightcards/display.py @@ -46,7 +46,7 @@ class Display(): # Create bar component bar_start = "[" bar_middle = self.stack[self.obj.getIdx()].printStar() - bar_end= "] [" + percent + "% (" + \ + bar_end = "] [" + percent + "% (" + \ str(self.obj.getIdx() + 1).zfill(len(str(len(self.stack)))) + \ "/" + str(len(self.stack)) + ")] [" + \ self.headers[self.obj.getSide()] + " (" + \ @@ -58,46 +58,41 @@ class Display(): self.win.insstr(bar_end, curses.color_pair(1)) def menu_print(self, string, err=False): + (mlines, mcols) = self.win.getmaxyx() self.win.clear() if err: - self.win.addstr(string + "\n\n", curses.color_pair(2)) + color = curses.color_pair(2) else: - self.win.addstr(string + "\n\n", curses.color_pair(1)) - self.disp_menu() - - def disp_menu(self): - """ - Display a menu once the end of the deck has been reached, offering - multiple options on how to continue. - """ + color = curses.color_pair(1) + self.disp_menu(keygrab=False) + self.win.addstr("\n\n" + string, color) + self.menu_grab() - self.win.addstr("Choose one of the following options:\n\n" + - "[y]: reset stack to original state\n" + - "[z]: shuffle stack\n" + - "[f]: flip all cards in stack\n" + - "[t]: reverse stack order\n" + - "[u]: unstar all\n" + - "[s]: update stack to include starred only\n\n" + - "[r]: restart\n" + - "[q]: quit") - self.obj.setIdx(0) + def menu_grab(self): while True: key = self.win.getkey() if key == "q": - sys.exit(0) + if len(self.stack) == self.obj.getIdx(): + sys.exit(0) + elif len(self.stack) < self.obj.getIdx(): + self.obj.setIdx(0) + self.get_key() elif key == "y": self.stack = lightcards.get_orig()[1] self.menu_print("Stack reset!") elif key == "u": [x.unStar() for x in self.stack] self.menu_print("All unstarred!") + elif key == "d": + [x.star() for x in self.stack] + self.menu_print("All starred!") elif key == "t": self.stack.reverse() self.menu_print( "self.stack reversed!") elif key == "z": shuffle(self.stack) - self.menu_print("self.stack shuffled!") + self.menu_print("Stack shuffled!") elif key == "f": for x in self.stack: x[0], x[1] = x[1], x[0] @@ -122,8 +117,31 @@ class Display(): self.obj.setIdx(len(self.stack) - 1) self.get_key() elif key == "r": + self.obj.setIdx(0) self.get_key() + def disp_menu(self, keygrab=True): + """ + Display a menu once the end of the deck has been reached, offering + multiple options on how to continue. + """ + + self.win.addstr("LIGHTCARDS MENU", curses.color_pair(1) + + curses.A_BOLD) + self.win.hline(1, 0, curses.ACS_HLINE, 15) + self.win.addstr(2, 0, "[y]: reset stack to original state\n" + + "[z]: shuffle stack\n" + + "[f]: flip all cards in stack\n" + + "[t]: reverse stack order\n" + + "[u]: unstar all\n" + + "[d]: star all\n" + + "[s]: update stack to include starred only\n\n" + + "[r]: restart\n" + + "[q]: back") + + if keygrab: + self.menu_grab() + def wrap_width(self): (mlines, mcols) = self.win.getmaxyx() wrap_width = mcols @@ -178,7 +196,7 @@ class Display(): self.win.hline(1, 0, curses.ACS_HLINE, 15) self.win.addstr(2, 0, textwrap.fill( "Welcome to lightcards. Here are some keybindings to get you " + - "started", width=self.wrap_width()) + + "started:", width=self.wrap_width()) + "\n\nh, left previous card\n" + "l, right next card\n" + "j, k, up, down flip card\n" + @@ -186,7 +204,8 @@ class Display(): "0, ^, home go to the start of the deck\n" + "$, end go to the end of the deck\n" + "H, ? open this screen\n" + - "e open the input file in $EDITOR\n\n" + + "e open the input file in $EDITOR\n" + + "m open the control menu\n\n" + textwrap.fill( "More information can be found in the man page, " + "or by running `lightcards --help`.", @@ -232,6 +251,9 @@ class Display(): self.disp_card() elif key in ["H", "?"]: self.disp_help() + elif key == "m": + self.win.clear() + self.disp_menu() elif key == "e": (self.headers, self.stack) = lightcards.reparse() self.get_key() diff --git a/man/lightcards.1 b/man/lightcards.1 index b4029ef..1bd1ab9 100644 --- a/man/lightcards.1 +++ b/man/lightcards.1 @@ -59,6 +59,9 @@ Open help screen .TP \f[B]e\f[R] Open input file in $EDITOR +.TP +\f[B]m\f[R] +Open control menu .SH EXIT VALUES .TP \f[B]0\f[R] diff --git a/man/lightcards.1.md b/man/lightcards.1.md index 90d0c1a..bb95875 100644 --- a/man/lightcards.1.md +++ b/man/lightcards.1.md @@ -56,6 +56,9 @@ lightcards [[options]] [input file] **e** : Open input file in $EDITOR +**m** +: Open control menu + # EXIT VALUES **0** : Success -- 2.39.2