]> git.armaanb.net Git - lightcards.git/commitdiff
Add proper text wrapping and truncation
authorArmaan Bhojwani <me@armaanb.net>
Sun, 31 Jan 2021 15:25:22 +0000 (10:25 -0500)
committerArmaan Bhojwani <me@armaanb.net>
Sun, 31 Jan 2021 15:41:56 +0000 (10:41 -0500)
lightcards/display.py

index 0ce321fcb1727105bd865b5d5f9ac8a1517b7f6b..c9da9a95557aa133129319c3890ca45060e3f1ea 100755 (executable)
@@ -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)