aboutsummaryrefslogtreecommitdiff
path: root/src/lua_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua_interface.c')
-rw-r--r--src/lua_interface.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/lua_interface.c b/src/lua_interface.c
index d954e06e..3c94c6fc 100644
--- a/src/lua_interface.c
+++ b/src/lua_interface.c
@@ -1130,9 +1130,19 @@ static int l_cf_view_goto_buffer(lua_State *lua) {
static int l_cf_gui_dialog(lua_State *lua) {
GCDialogType type = gcocoadialog_type(luaL_checkstring(lua, 1));
- int argc = lua_gettop(lua) - 1;
+ int i, j, k, n = lua_gettop(lua) - 1, argc = n;
+ for (i = 2; i < n + 2; i++)
+ if (lua_type(lua, i) == LUA_TTABLE) argc += lua_objlen(lua, i) - 1;
const char *argv[argc];
- for (int i = 0; i < argc; i++) argv[i] = luaL_checkstring(lua, i + 2);
+ for (i = 0, j = 2; j < n + 2; j++)
+ if (lua_type(lua, j) == LUA_TTABLE) {
+ int len = lua_objlen(lua, j);
+ for (int k = 1; k <= len; k++) {
+ lua_rawgeti(lua, j, k);
+ argv[i++] = luaL_checkstring(lua, j + 1);
+ lua_pop(lua, 1);
+ }
+ } else argv[i++] = luaL_checkstring(lua, j);
char *out = gcocoadialog(type, argc, argv);
lua_pushstring(lua, out);
free(out);