@@ -1655,6 +1655,21 @@ _curses_window_getbkgd_impl(PyCursesWindowObject *self)
16551655 return (long ) getbkgd (self -> win );
16561656}
16571657
1658+ static PyObject *
1659+ curses_check_signals_on_input_error (PyCursesWindowObject * self ,
1660+ const char * curses_funcname ,
1661+ const char * python_funcname )
1662+ {
1663+ assert (!PyErr_Occurred ());
1664+ if (PyErr_CheckSignals ()) {
1665+ return NULL ;
1666+ }
1667+ cursesmodule_state * state = get_cursesmodule_state_by_win (self );
1668+ PyErr_Format (state -> error , "%s() (called by %s()): no input" ,
1669+ curses_funcname , python_funcname );
1670+ return NULL ;
1671+ }
1672+
16581673/*[clinic input]
16591674_curses.window.getch
16601675
@@ -1737,14 +1752,9 @@ _curses_window_getkey_impl(PyCursesWindowObject *self, int group_right_1,
17371752 Py_END_ALLOW_THREADS
17381753
17391754 if (rtn == ERR ) {
1740- /* getch() returns ERR in nodelay mode */
1741- PyErr_CheckSignals ();
1742- if (!PyErr_Occurred ()) {
1743- cursesmodule_state * state = get_cursesmodule_state_by_win (self );
1744- const char * funcname = group_right_1 ? "mvwgetch" : "wgetch" ;
1745- PyErr_Format (state -> error , "getkey(): %s(): no input" , funcname );
1746- }
1747- return NULL ;
1755+ /* wgetch() returns ERR in nodelay mode */
1756+ const char * funcname = group_right_1 ? "mvwgetch" : "wgetch" ;
1757+ return curses_check_signals_on_input_error (self , funcname , "getkey" );
17481758 } else if (rtn <= 255 ) {
17491759#ifdef NCURSES_VERSION_MAJOR
17501760#if NCURSES_VERSION_MAJOR * 100 + NCURSES_VERSION_MINOR <= 507
@@ -1797,14 +1807,9 @@ _curses_window_get_wch_impl(PyCursesWindowObject *self, int group_right_1,
17971807 Py_END_ALLOW_THREADS
17981808
17991809 if (ct == ERR ) {
1800- if (PyErr_CheckSignals ())
1801- return NULL ;
1802-
1803- /* get_wch() returns ERR in nodelay mode */
1804- cursesmodule_state * state = get_cursesmodule_state_by_win (self );
1810+ /* wget_wch() returns ERR in nodelay mode */
18051811 const char * funcname = group_right_1 ? "mvwget_wch" : "wget_wch" ;
1806- PyErr_Format (state -> error , "get_wch(): %s(): no input" , funcname );
1807- return NULL ;
1812+ return curses_check_signals_on_input_error (self , funcname , "get_wch" );
18081813 }
18091814 if (ct == KEY_CODE_YES )
18101815 return PyLong_FromLong (rtn );
0 commit comments