Python curses module does not print any attributed space character on FreeBSD 11-current
raviqqe
raviqqe at gmail.com
Thu Nov 19 03:57:16 UTC 2015
Hello,
TL;DR
I encountered a bug-like behavior of a Python built-in module.
Could you reproduce it in C?
While working with Python and its curses module on FreeBSD 11-current
(x86_64),
I found a weird behavior of the module. The code below doesn't print any
character
although it should print a space on the upper-left corner.
```
# test.py
import curses
window = curses.initscr()
window.attrset(curses.A_NORMAL)
window.addch(" ")
window.getch()
curses.endwin()
```
The cause is `window.attrset()` and when I removed the line it works
just fine.
And, with the visible characters (such as 'A' and '?' except for ' ' and
'\t'),
it works fine even if window.attrset() is there.
I found out Python's _curses.so links with
/usr/local/lib/libncurses.so.5 dynamically.
When I links it with the new /lib/libncurses.so.8 shipped with FreeBSD
11-current base
as follows, the code above (test.py in the command line below) works fine.
```
$ ln -s /lib/libncurses.so.8 /usr/lib/libncurses.so.5
$ LD_LIBRARY_PATH=/usr/lib python3.5 test.py
```
Then, I tried to reproduce it in C with the code below.
```
// test.c
#include <curses.h>
int
main()
{
WINDOW *win = initscr();
wattrset(win, A_NORMAL);
waddch(win, ' ');
getch();
endwin();
}
```
Compiled and run it (test.c).
```
$ cc /usr/local/lib/libncurses.so.5 /usr/local/lib/libtinfo.so.5 test.c
$ ./a.out
```
It WORKS FINE as printing a space in place. I explored
Modules/_cursesmodule.c
in Python source tree and found that Python's curses.initscr() calls
setupterm()
in <term.h> too. And, I checked the TERM environment variable.
But, the real problem could not be revealed eventually.
Could someone help me to reproduce the bug in C?
Am I missing something? Or, do I misunderstand the problem?
Thank you, all.
More information about the freebsd-python
mailing list