summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Doc/Zsh/mod_curses.yo11
-rw-r--r--Src/Modules/curses.c30
3 files changed, 42 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index fb09814a3..c221337a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2007-10-28 Peter Stephenson <p.w.stephenson@ntlworld.com>
+ * 24028: Doc/Zsh/mod_curses.yo, Src/Modules/curses.c:
+ add "zcurses timeout".
+
* 24027: Doc/Zsh/mod_curses.yo, Src/Modules/curses.c:
add "touch", subwindows, optimized "refresh".
diff --git a/Doc/Zsh/mod_curses.yo b/Doc/Zsh/mod_curses.yo
index b53238288..b88c7979b 100644
--- a/Doc/Zsh/mod_curses.yo
+++ b/Doc/Zsh/mod_curses.yo
@@ -23,7 +23,8 @@ xitem(tt(zcurses) tt(string) var(targetwin) var(string) )
xitem(tt(zcurses) tt(border) var(targetwin) var(border) )(
xitem(tt(zcurses) tt(attr) var(targetwin) [ var({+/-}attribute) | var(fg_col)tt(/)var(bg_col) ] [...])
xitem(tt(zcurses) tt(scroll) [ tt(on) | tt(off) | {+/-}var(lines) ])
-item(tt(input) var(targetwin) [ var(param) [ var(kpparm) ] ])(
+xitem(tt(zcurses) tt(input) var(targetwin) [ var(param) [ var(kpparm) ] ])
+item(tt(zcurses) tt(timeout) var(targetwin) var(intval))(
Manipulate curses windows. All uses of this command should be
bracketed by `tt(zcurses init)' to initialise use of curses, and
`tt(zcurses end)' to end it; omitting `tt(zcurses end)' can cause
@@ -125,6 +126,14 @@ with the prefix `tt(KEY_)' removed. Other keys cause a value to be set in
var(param) as before. On a succesful return only one of var(param) or
var(kpparm) contains a non-empty string; the other is set to an empty
string.
+
+tt(timeout) specifies a timeout value for input from var(targetwin).
+If var(intval) is negative, `tt(zcurses input)' waits indefinitely for
+a character to be typed; this is the default. If var(intval) is zero,
+`tt(zcurses input)' returns immediately; if there is typeahead it is
+returned, else no input is done and status 1 is returned. If var(intval)
+is positive, `tt(zcurses input)' waits var(intval) milliseconds for
+input and if there is none at the end of that period returns status 1.
)
enditem()
diff --git a/Src/Modules/curses.c b/Src/Modules/curses.c
index 0f9647fb9..063ac9014 100644
--- a/Src/Modules/curses.c
+++ b/Src/Modules/curses.c
@@ -562,7 +562,7 @@ zccmd_refresh(const char *nam, char **args)
static int
-zccmd_move(const char *nam, char **args)
+zccmd_move(const char *nam, char **args)
{
int y, x;
LinkNode node;
@@ -936,6 +936,33 @@ zccmd_input(const char *nam, char **args)
static int
+zccmd_timeout(const char *nam, char **args)
+{
+ LinkNode node;
+ ZCWin w;
+ int to;
+ char *eptr;
+
+ node = zcurses_validate_window(args[0], ZCURSES_USED);
+ if (node == NULL) {
+ zwarnnam(nam, "%s: %s", zcurses_strerror(zc_errno), args[0]);
+ return 1;
+ }
+
+ w = (ZCWin)getdata(node);
+
+ to = (int)zstrtol(args[1], &eptr, 10);
+ if (*eptr) {
+ zwarnnam(nam, "timeout requires an integer: %s", args[1]);
+ return 1;
+ }
+
+ wtimeout(w->win, to);
+ return 0;
+}
+
+
+static int
zccmd_position(const char *nam, char **args)
{
LinkNode node;
@@ -1019,6 +1046,7 @@ bin_zcurses(char *nam, char **args, Options ops, UNUSED(int func))
{"attr", zccmd_attr, 2, -1},
{"scroll", zccmd_scroll, 2, 2},
{"input", zccmd_input, 1, 3},
+ {"timeout", zccmd_timeout, 2, 2},
{"touch", zccmd_touch, 1, -1},
{NULL, (zccmd_t)0, 0, 0}
};