From 44bb081ce631f9dad6484f6b352875f21c6e218d Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani Date: Sun, 31 Jan 2021 10:25:22 -0500 Subject: [PATCH] Add proper text wrapping and truncation --- lightcards/display.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/lightcards/display.py b/lightcards/display.py index 0ce321f..c9da9a9 100755 --- a/lightcards/display.py +++ b/lightcards/display.py @@ -4,6 +4,7 @@ import curses from random import shuffle import sys +import textwrap def disp_bar(stdscr, stack, headers, obj): @@ -76,23 +77,36 @@ def disp_menu(stdscr, stack, headers, idx): def disp_card(stdscr, stack, headers, obj): stdscr.clear() + (mlines, mcols) = stdscr.getmaxyx() if obj.getIdx() == len(stack): disp_menu(stdscr, stack, headers, obj) else: if obj.getSide() == 0: - top = headers[obj.getSide()] + "; " + str(obj.getIdx() + 1) + "\n" + top = headers[obj.getSide()] + "; " + str(obj.getIdx() + 1) else: top = headers[obj.getSide()] + "; " + str(obj.getIdx() + 1) + \ - "; " + str(stack[obj.getIdx()][0]) + "\n" + "; " + str(stack[obj.getIdx()][0]) + + header_width = mcols + if mcols > 80: + header_width = 80 + + stdscr.addstr(textwrap.shorten(top, width=header_width, + placeholder="…"), curses.A_BOLD) - stdscr.addstr(top, curses.A_BOLD) - (mlines, mcols) = stdscr.getmaxyx() + # Add horizontal line + lin_width = mcols if len(top) < mcols: - mcols = len(top) - for i in range(mcols): - stdscr.addch("=") + lin_width = len(top) + stdscr.hline(1, 0, curses.ACS_HLINE, lin_width) - stdscr.addstr("\n" + str(stack[obj.getIdx()][obj.getSide()])) + # Show current side + wrap_width = mcols + if mcols > 80: + wrap_width = 80 + stdscr.hline(curses.ACS_HLINE, lin_width) + stdscr.addstr(2, 0, textwrap.fill(stack[obj.getIdx()][obj.getSide()], + width=wrap_width)) disp_bar(stdscr, stack, headers, obj) -- 2.39.2