]> granicus.if.org Git - python/commitdiff
Add window.chgat() method, submitted via e-mail by Fabian Kreutz
authorAndrew M. Kuchling <amk@amk.ca>
Wed, 11 Apr 2007 13:39:00 +0000 (13:39 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Wed, 11 Apr 2007 13:39:00 +0000 (13:39 +0000)
Doc/lib/libcurses.tex
Doc/whatsnew/whatsnew26.tex
Lib/test/test_curses.py
Misc/ACKS
Modules/_cursesmodule.c

index fa9f974af348e009120656e4b790d540f5eb202d..bf3505a8437839ef86ee55b48ccb7b6bf092561e 100644 (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.
 \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}{}
 Like \method{erase()}, but also causes the whole window to be repainted
 upon next call to \method{refresh()}.
index fa7dd40394c3a1c51fa4d7ce2b7e8cd1ae796c5e..3543d9d3e61889c33567513396cac63c14d32181 100644 (file)
@@ -135,6 +135,18 @@ print var[2], var.type          # Equivalent
 
 (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:
 \function{merge(iter1, iter2, ...)} 
 takes any number of iterables that return data 
index b67dbe368d003add168c050058cafed7255490e9..b236f35b1894f5648352ee9b65f3bfb1baa72692 100644 (file)
@@ -129,6 +129,12 @@ def window_funcs(stdscr):
     stdscr.touchline(5,5,0)
     stdscr.vline('a', 3)
     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, curses.A_STANDOUT)
 
index 0cbca31594cda4572bbc2e9feefe7221a72f5c68..b47ec6e5887df50744c9975e6ff4b14c5cc1b5e4 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -367,6 +367,7 @@ Damon Kohler
 Joseph Koshy
 Bob Kras
 Holger Krekel
+Fabian Kreutz
 Hannu Krosing
 Andrew Kuchling
 Vladimir Kushnir
index d88368053c213c9d59376ada35695debe38af928..eaeb3d8f60b41846e01193a263ebbc2cfe3b9ef5 100644 (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
 unsupported functions:
 
-       addchnstr addchstr chgat color_set define_key
+       addchnstr addchstr color_set define_key
        del_curterm delscreen dupwin inchnstr inchstr innstr keyok
-       mcprint mvaddchnstr mvaddchstr mvchgat mvcur mvinchnstr
-       mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr mvwchgat
+       mcprint mvaddchnstr mvaddchstr mvcur mvinchnstr
+       mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr 
        mvwinchnstr mvwinchstr mvwinnstr newterm
        restartterm ripoffline scr_dump
        scr_init scr_restore scr_set scrl set_curterm set_term setterm
        tgetent tgetflag tgetnum tgetstr tgoto timeout tputs
-       vidattr vidputs waddchnstr waddchstr wchgat
+       vidattr vidputs waddchnstr waddchstr
        wcolor_set winchnstr winchstr winnstr wmouse_trafo wscrl
 
 Low-priority: 
@@ -620,6 +620,56 @@ int py_mvwdelch(WINDOW *w, int y, int x)
 }
 #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 *
 PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
@@ -1428,6 +1478,7 @@ static PyMethodDef PyCursesWindow_Methods[] = {
        {"attron",          (PyCFunction)PyCursesWindow_wattron, METH_VARARGS},
        {"attrset",         (PyCFunction)PyCursesWindow_wattrset, METH_VARARGS},
        {"bkgd",            (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS},
+       {"chgat",           (PyCFunction)PyCursesWindow_ChgAt, METH_VARARGS},
        {"bkgdset",         (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS},
        {"border",          (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
        {"box",             (PyCFunction)PyCursesWindow_Box, METH_VARARGS},