From ef4b12eea1c262cd35f0cf8759e0af0e4740682f Mon Sep 17 00:00:00 2001 From: Rui Guo Date: Wed, 17 Jun 2009 21:25:29 +0800 Subject: [PATCH] input() can now have an optional prefilled content. --- src/lua.c | 22 +++++++++++++++++++--- src/scripts/findwindow.lua | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lua.c b/src/lua.c index d5c936a..f24420f 100644 --- a/src/lua.c +++ b/src/lua.c @@ -777,14 +777,20 @@ script_input_fn(char *buf, int len, char *priv) static int screen_input(lua_State *L) { - char * prompt = NULL; + char *ss; + int n; + const char * prompt = NULL, *prefill = NULL; lua_handler lh; struct sinput_data *sidata; - prompt = (char *)luaL_checkstring(L, 1); + prompt = luaL_checkstring(L, 1); lh = LuaCheckHandler(L, 2, 1); if (!lh) luaL_error(L, "Out of Memory"); + + if (lua_gettop(L) >= 3) + prefill = luaL_checkstring(L, 3); + sidata = (struct sinput_data *)malloc(sizeof(struct sinput_data)); if (!sidata) @@ -792,8 +798,18 @@ screen_input(lua_State *L) sidata->L = L; sidata->lh = lh; - Input(prompt, 100, INP_COOKED, script_input_fn, (char *)sidata, 0); + Input((char *)prompt, 100, INP_COOKED, script_input_fn, (char *)sidata, 0); + if (!prefill) + return 0; + for (; *prefill; prefill++) + { + if ((*(unsigned char *)prefill & 0x7f) < 0x20 || *prefill == 0x7f) + continue; + ss = (char *)prefill; + n = 1; + LayProcess(&ss, &n); + } return 0; } diff --git a/src/scripts/findwindow.lua b/src/scripts/findwindow.lua index 68b57ae..448bfdb 100644 --- a/src/scripts/findwindow.lua +++ b/src/scripts/findwindow.lua @@ -2,7 +2,7 @@ function find_window(name) if name ~= nil then find_window_internal(name) else - screen.input("window to find:", find_window_internal) + screen.input("window to find:", find_window_internal, "window") end end -- 2.11.4.GIT