From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 20 Aug 2017 22:10:41 +0000 (+0200)
Subject: Fix buggy healthy_addch().
X-Git-Tag: PtIG
X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%7B%7B%20web_path%20%7D%7D/%7B%7Bprefix%7D%7D/new_day?a=commitdiff_plain;h=HEAD;p=plomrogue

Fix buggy healthy_addch().
---

diff --git a/client/window_management.py b/client/window_management.py
index 610764b..a896b02 100644
--- a/client/window_management.py
+++ b/client/window_management.py
@@ -108,14 +108,20 @@ def set_windows():
 def draw_screen():
 
     def healthy_addch(y, x, char, attr=0):
-        """Workaround for <http://stackoverflow.com/questions/7063128/>."""
+        """Wrap Python curses' addch() weirdnesses into sane interface.
+
+        Works around <http://stackoverflow.com/questions/7063128/> with
+        <https://stackoverflow.com/a/26797300> and enforces char to be a byte
+        instead of a single-char string.
+        """
         if y == screen_size[0] - 1 and x == screen_size[1] - 1:
             char_before = stdscr.inch(y, x - 1)
-            stdscr.addch(y, x - 1, char, attr)
+            stdscr.addch(y, x - 1, char.encode(), attr)
             stdscr.insstr(y, x - 1, " ")
-            stdscr.addch(y, x - 1, char_before)
+            stdscr.addch(y, x - 1,
+                         char_before & 0xFF, char_before & curses.A_ATTRIBUTES)
         else:
-            stdscr.addch(y, x, char, attr)
+            stdscr.addch(y, x, char.encode(), attr)
 
     def draw_window_border_lines():
         for win in windows: