mirror of
https://github.com/python/cpython.git
synced 2025-12-11 03:20:01 +00:00
Close #14223: Fix window.addch(curses.ACS_HLINE)
Fix window.addch() of the curses module for special characters like curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now calling the C function waddch()/mvwaddch() (as it was done in Python 3.2), instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked to libncursesw.
This commit is contained in:
parent
848cdfdf97
commit
eaaf9e9249
2 changed files with 14 additions and 27 deletions
|
|
@ -28,6 +28,13 @@ Library
|
||||||
always returning an integer. So it is now possible to distinguish special
|
always returning an integer. So it is now possible to distinguish special
|
||||||
keys like keypad keys.
|
keys like keypad keys.
|
||||||
|
|
||||||
|
- Issue #14223: Fix window.addch() of the curses module for special characters
|
||||||
|
like curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now
|
||||||
|
calling the C function waddch()/mvwaddch() (as it was done in Python 3.2),
|
||||||
|
instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still
|
||||||
|
calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked
|
||||||
|
to libncursesw.
|
||||||
|
|
||||||
|
|
||||||
What's New in Python 3.3.0 Release Candidate 1?
|
What's New in Python 3.3.0 Release Candidate 1?
|
||||||
===============================================
|
===============================================
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,6 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
|
||||||
long value;
|
long value;
|
||||||
#ifdef HAVE_NCURSESW
|
#ifdef HAVE_NCURSESW
|
||||||
wchar_t buffer[2];
|
wchar_t buffer[2];
|
||||||
|
|
@ -304,7 +303,6 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
|
||||||
}
|
}
|
||||||
else if(PyBytes_Check(obj) && PyBytes_Size(obj) == 1) {
|
else if(PyBytes_Check(obj) && PyBytes_Size(obj) == 1) {
|
||||||
value = (unsigned char)PyBytes_AsString(obj)[0];
|
value = (unsigned char)PyBytes_AsString(obj)[0];
|
||||||
ret = 1;
|
|
||||||
}
|
}
|
||||||
else if (PyLong_CheckExact(obj)) {
|
else if (PyLong_CheckExact(obj)) {
|
||||||
int overflow;
|
int overflow;
|
||||||
|
|
@ -314,11 +312,6 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
|
||||||
"int doesn't fit in long");
|
"int doesn't fit in long");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_NCURSESW
|
|
||||||
ret = 2;
|
|
||||||
#else
|
|
||||||
ret = 1;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
|
@ -326,27 +319,14 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
|
||||||
Py_TYPE(obj)->tp_name);
|
Py_TYPE(obj)->tp_name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_NCURSESW
|
|
||||||
if (ret == 2) {
|
|
||||||
memset(wch->chars, 0, sizeof(wch->chars));
|
|
||||||
wch->chars[0] = (wchar_t)value;
|
|
||||||
if ((long)wch->chars[0] != value) {
|
|
||||||
PyErr_Format(PyExc_OverflowError,
|
|
||||||
"character doesn't fit in wchar_t");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
*ch = (chtype)value;
|
*ch = (chtype)value;
|
||||||
if ((long)*ch != value) {
|
if ((long)*ch != value) {
|
||||||
PyErr_Format(PyExc_OverflowError,
|
PyErr_Format(PyExc_OverflowError,
|
||||||
"byte doesn't fit in chtype");
|
"byte doesn't fit in chtype");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
return 1;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert an object to a byte string (char*) or a wide character string
|
/* Convert an object to a byte string (char*) or a wide character string
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue