Add window.chgat() method, submitted via e-mail by Fabian Kreutz

This commit is contained in:
Andrew M. Kuchling 2007-04-11 13:39:00 +00:00
parent 781aef2d6b
commit 400a49ba79
5 changed files with 84 additions and 4 deletions

View file

@ -646,6 +646,16 @@ Similar to \method{border()}, but both \var{ls} and \var{rs} are
corner characters are always used by this function. corner characters are always used by this function.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[window]{chgat}{\optional{y, x, } \optional{num,} attr}
Sets the attributes of \var{num} characters at the current cursor
position, or at position \code{(\var{y}, \var{x})} if supplied. If no
value of \var{num} is given or \var{num} = -1, the attribute will
be set on all the characters to the end of the line.
This function does not move the cursor. The changed line
will be touched using the \method{touchline} method so that the
contents will be redisplayed by the next window refresh.
\end{methoddesc}
\begin{methoddesc}[window]{clear}{} \begin{methoddesc}[window]{clear}{}
Like \method{erase()}, but also causes the whole window to be repainted Like \method{erase()}, but also causes the whole window to be repainted
upon next call to \method{refresh()}. upon next call to \method{refresh()}.

View file

@ -135,6 +135,18 @@ print var[2], var.type # Equivalent
(Contributed by Raymond Hettinger.) (Contributed by Raymond Hettinger.)
\item New method in the \module{curses} module:
for a window, \method{chgat()} changes the display characters for a
certain number of characters on a single line.
\begin{verbatim}
# Boldface text starting at y=0,x=21
# and affecting the rest of the line.
stdscr.chgat(0,21, curses.A_BOLD)
\end{verbatim}
(Contributed by Fabian Kreutz.)
\item New function in the \module{heapq} module: \item New function in the \module{heapq} module:
\function{merge(iter1, iter2, ...)} \function{merge(iter1, iter2, ...)}
takes any number of iterables that return data takes any number of iterables that return data

View file

@ -129,6 +129,12 @@ def window_funcs(stdscr):
stdscr.touchline(5,5,0) stdscr.touchline(5,5,0)
stdscr.vline('a', 3) stdscr.vline('a', 3)
stdscr.vline('a', 3, curses.A_STANDOUT) stdscr.vline('a', 3, curses.A_STANDOUT)
stdscr.chgat(5, 2, 3, curses.A_BLINK)
stdscr.chgat(3, curses.A_BOLD)
stdscr.chgat(5, 8, curses.A_UNDERLINE)
stdscr.chgat(curses.A_BLINK)
stdscr.refresh()
stdscr.vline(1,1, 'a', 3) stdscr.vline(1,1, 'a', 3)
stdscr.vline(1,1, 'a', 3, curses.A_STANDOUT) stdscr.vline(1,1, 'a', 3, curses.A_STANDOUT)

View file

@ -367,6 +367,7 @@ Damon Kohler
Joseph Koshy Joseph Koshy
Bob Kras Bob Kras
Holger Krekel Holger Krekel
Fabian Kreutz
Hannu Krosing Hannu Krosing
Andrew Kuchling Andrew Kuchling
Vladimir Kushnir Vladimir Kushnir

View file

@ -39,15 +39,15 @@ A number of SysV or ncurses functions don't have wrappers yet; if you need
a given function, add it and send a patch. Here's a list of currently a given function, add it and send a patch. Here's a list of currently
unsupported functions: unsupported functions:
addchnstr addchstr chgat color_set define_key addchnstr addchstr color_set define_key
del_curterm delscreen dupwin inchnstr inchstr innstr keyok del_curterm delscreen dupwin inchnstr inchstr innstr keyok
mcprint mvaddchnstr mvaddchstr mvchgat mvcur mvinchnstr mcprint mvaddchnstr mvaddchstr mvcur mvinchnstr
mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr mvwchgat mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr
mvwinchnstr mvwinchstr mvwinnstr newterm mvwinchnstr mvwinchstr mvwinnstr newterm
restartterm ripoffline scr_dump restartterm ripoffline scr_dump
scr_init scr_restore scr_set scrl set_curterm set_term setterm scr_init scr_restore scr_set scrl set_curterm set_term setterm
tgetent tgetflag tgetnum tgetstr tgoto timeout tputs tgetent tgetflag tgetnum tgetstr tgoto timeout tputs
vidattr vidputs waddchnstr waddchstr wchgat vidattr vidputs waddchnstr waddchstr
wcolor_set winchnstr winchstr winnstr wmouse_trafo wscrl wcolor_set winchnstr winchstr winnstr wmouse_trafo wscrl
Low-priority: Low-priority:
@ -620,6 +620,56 @@ int py_mvwdelch(WINDOW *w, int y, int x)
} }
#endif #endif
/* chgat, added by Fabian Kreutz <fabian.kreutz at gmx.net> */
static PyObject *
PyCursesWindow_ChgAt(PyCursesWindowObject *self, PyObject *args)
{
int rtn;
int x, y;
int num = -1;
short color;
attr_t attr = A_NORMAL;
int use_xy = FALSE;
switch (PyTuple_Size(args)) {
case 1:
if (!PyArg_ParseTuple(args,"l;attr", &attr))
return NULL;
break;
case 2:
if (!PyArg_ParseTuple(args,"il;n,attr", &num, &attr))
return NULL;
break;
case 3:
if (!PyArg_ParseTuple(args,"iil;int,int,attr", &y, &x, &attr))
return NULL;
use_xy = TRUE;
break;
case 4:
if (!PyArg_ParseTuple(args,"iiil;int,int,n,attr", &y, &x, &num, &attr))
return NULL;
use_xy = TRUE;
break;
default:
PyErr_SetString(PyExc_TypeError, "chgat requires 1 to 4 arguments");
return NULL;
}
color = (short)((attr >> 8) & 0xff);
attr = attr - (color << 8);
if (use_xy == TRUE) {
rtn = mvwchgat(self->win,y,x,num,attr,color,NULL);
touchline(self->win,y,1);
} else {
getyx(self->win,y,x);
rtn = wchgat(self->win,num,attr,color,NULL);
touchline(self->win,y,1);
}
return PyCursesCheckERR(rtn, "chgat");
}
static PyObject * static PyObject *
PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args) PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
@ -1428,6 +1478,7 @@ static PyMethodDef PyCursesWindow_Methods[] = {
{"attron", (PyCFunction)PyCursesWindow_wattron, METH_VARARGS}, {"attron", (PyCFunction)PyCursesWindow_wattron, METH_VARARGS},
{"attrset", (PyCFunction)PyCursesWindow_wattrset, METH_VARARGS}, {"attrset", (PyCFunction)PyCursesWindow_wattrset, METH_VARARGS},
{"bkgd", (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS}, {"bkgd", (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS},
{"chgat", (PyCFunction)PyCursesWindow_ChgAt, METH_VARARGS},
{"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS}, {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS},
{"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS}, {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
{"box", (PyCFunction)PyCursesWindow_Box, METH_VARARGS}, {"box", (PyCFunction)PyCursesWindow_Box, METH_VARARGS},