input() can now have an optional prefilled content.
authorRui Guo <firemeteor.guo@gmail.com>
Wed, 17 Jun 2009 13:25:29 +0000 (17 21:25 +0800)
committerRui Guo <firemeteor.guo@gmail.com>
Wed, 17 Jun 2009 13:25:29 +0000 (17 21:25 +0800)
src/lua.c
src/scripts/findwindow.lua

index d5c936a..f24420f 100644 (file)
--- 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;
 }
 
index 68b57ae..448bfdb 100644 (file)
@@ -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