[lua] Remove regex matching

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-05-23 13:17:02 +02:00
parent fb822997b3
commit ccb2a2db77
5 changed files with 45 additions and 91 deletions

View File

@ -40,7 +40,7 @@ end
-- set i to 1 to get next, -1 to get previous. -- set i to 1 to get next, -1 to get previous.
function client_next(i) function client_next(i)
-- Get all visible clients -- Get all visible clients
local cls = client.visible_get(mouse.screen_get(), ".*") local cls = client.visible_get(mouse.screen_get())
-- Get currently focused client -- Get currently focused client
local sel = client.focus_get() local sel = client.focus_get()
if not sel then return end if not sel then return end
@ -94,7 +94,7 @@ end
function getselectedtags() function getselectedtags()
local idx = 1 local idx = 1
local screen = mouse.screen_get() local screen = mouse.screen_get()
local tags = tag.get(screen, ".*") local tags = tag.get(screen)
local vtags = {} local vtags = {}
for i, t in ipairs(tags) do for i, t in ipairs(tags) do
if t:isselected() then if t:isselected() then
@ -161,14 +161,14 @@ end
-- View no tag -- View no tag
function tag_viewnone() function tag_viewnone()
local tags = tag.get(mouse.screen_get(), ".*") local tags = tag.get(mouse.screen_get())
for i, t in ipairs(tags) do for i, t in ipairs(tags) do
t:view(false) t:view(false)
end end
end end
function tag_viewidx(r) function tag_viewidx(r)
local tags = tag.get(mouse.screen_get(), ".*") local tags = tag.get(mouse.screen_get())
local sel = getselectedtag() local sel = getselectedtag()
tag_viewnone() tag_viewnone()
for i, t in ipairs(tags) do for i, t in ipairs(tags) do
@ -202,7 +202,7 @@ end
function client_movetotag(target, c) function client_movetotag(target, c)
local sel = c or client.focus_get(); local sel = c or client.focus_get();
local tags = tag.get(mouse.screen_get(), ".*") local tags = tag.get(mouse.screen_get())
for i, t in ipairs(tags) do for i, t in ipairs(tags) do
sel:tag(t, false) sel:tag(t, false)
end end

View File

@ -783,7 +783,7 @@ client_kill(client_t *c)
ev.data.data32[0] = xutil_intern_atom_reply(globalconf.connection, &globalconf.atoms, ev.data.data32[0] = xutil_intern_atom_reply(globalconf.connection, &globalconf.atoms,
xutil_intern_atom(globalconf.connection, xutil_intern_atom(globalconf.connection,
&globalconf.atoms, &globalconf.atoms,
"WM_DELETE_WINDOW")); "WM_DELETE_WINDOW"));
ev.data.data32[1] = XCB_CURRENT_TIME; ev.data.data32[1] = XCB_CURRENT_TIME;
@ -797,30 +797,19 @@ client_kill(client_t *c)
static int static int
luaA_client_get(lua_State *L) luaA_client_get(lua_State *L)
{ {
int ret, i = 1; int i = 1;
regex_t r;
regmatch_t match;
client_t *c, **cobj; client_t *c, **cobj;
const char *name = luaL_checkstring(L, 1);
char error[512];
if((ret = regcomp(&r, name, REG_EXTENDED)))
{
regerror(ret, &r, error, sizeof(error));
luaL_error(L, "regex compilation error: %s\n", error);
}
lua_newtable(L); lua_newtable(L);
for(c = globalconf.clients; c; c = c->next) for(c = globalconf.clients; c; c = c->next)
if(!regexec(&r, c->name, 1, &match, 0)) {
{ cobj = lua_newuserdata(L, sizeof(client_t *));
cobj = lua_newuserdata(L, sizeof(client_t *)); *cobj = c;
*cobj = c; luaA_settype(L, "client");
luaA_settype(L, "client"); lua_rawseti(L, -2, i++);
lua_rawseti(L, -2, i++); }
}
return 1; return 1;
} }
@ -857,34 +846,23 @@ luaA_client_mouse(lua_State *L)
static int static int
luaA_client_visible_get(lua_State *L) luaA_client_visible_get(lua_State *L)
{ {
int ret, i = 1; int i = 1;
regex_t r;
regmatch_t match;
client_t *c, **cobj; client_t *c, **cobj;
char error[512];
int screen = luaL_checknumber(L, 1) - 1; int screen = luaL_checknumber(L, 1) - 1;
const char *name = luaL_checkstring(L, 2);
luaA_checkscreen(screen); luaA_checkscreen(screen);
if((ret = regcomp(&r, name, REG_EXTENDED)))
{
regerror(ret, &r, error, sizeof(error));
luaL_error(L, "regex compilation error: %s\n", error);
}
lua_newtable(L); lua_newtable(L);
for(c = globalconf.clients; c; c = c->next) for(c = globalconf.clients; c; c = c->next)
if(!c->skip && client_isvisible(c, screen) if(!c->skip && client_isvisible(c, screen))
&& !regexec(&r, c->name, 1, &match, 0))
{ {
cobj = lua_newuserdata(L, sizeof(client_t *)); cobj = lua_newuserdata(L, sizeof(client_t *));
*cobj = c; *cobj = c;
luaA_settype(L, "client"); luaA_settype(L, "client");
lua_rawseti(L, -2, i++); lua_rawseti(L, -2, i++);
} }
return 1; return 1;
} }
@ -1006,7 +984,7 @@ luaA_client_coords_set(lua_State *L)
{ {
client_t **c = luaL_checkudata(L, 1, "client"); client_t **c = luaL_checkudata(L, 1, "client");
area_t geometry; area_t geometry;
if((*c)->isfloating || layout_get_current((*c)->screen) == layout_floating) if((*c)->isfloating || layout_get_current((*c)->screen) == layout_floating)
{ {
luaA_checktable(L, 2); luaA_checktable(L, 2);

View File

@ -24,8 +24,6 @@
#include <xcb/xcb_event.h> #include <xcb/xcb_event.h>
#include <regex.h>
#include "lua.h" #include "lua.h"
#include "layout.h" #include "layout.h"
#include "common/draw.h" #include "common/draw.h"

27
tag.c
View File

@ -268,32 +268,21 @@ static int
luaA_tag_get(lua_State *L) luaA_tag_get(lua_State *L)
{ {
int screen = luaL_checknumber(L, 1) - 1; int screen = luaL_checknumber(L, 1) - 1;
const char *name = luaL_checkstring(L, 2);
tag_t *tag, **tobj; tag_t *tag, **tobj;
int ret, i = 1; int i = 1;
regex_t r;
regmatch_t match;
char error[512];
luaA_checkscreen(screen); luaA_checkscreen(screen);
if((ret = regcomp(&r, name, REG_EXTENDED)))
{
regerror(ret, &r, error, sizeof(error));
luaL_error(L, "regex compilation error: %s\n", error);
}
lua_newtable(L); lua_newtable(L);
for(tag = globalconf.screens[screen].tags; tag; tag = tag->next) for(tag = globalconf.screens[screen].tags; tag; tag = tag->next)
if(!regexec(&r, tag->name, 1, &match, 0)) {
{ tobj = lua_newuserdata(L, sizeof(tag_t *));
tobj = lua_newuserdata(L, sizeof(tag_t *)); *tobj = tag;
*tobj = tag; tag_ref(&tag);
tag_ref(&tag); luaA_settype(L, "tag");
luaA_settype(L, "tag"); lua_rawseti(L, -2, i++);
lua_rawseti(L, -2, i++); }
}
return 1; return 1;
} }

View File

@ -295,50 +295,39 @@ luaA_widget_eq(lua_State *L)
static int static int
luaA_widget_get(lua_State *L) luaA_widget_get(lua_State *L)
{ {
const char *name = luaL_checkstring(L, 1);
statusbar_t *sb; statusbar_t *sb;
widget_t **wobj; widget_t **wobj;
widget_node_t *widget; widget_node_t *widget;
int ret, i = 1, screen; int i = 1, screen;
regex_t r;
regmatch_t match;
char error[512];
bool add = true; bool add = true;
widget_node_t *wlist = NULL, *witer; widget_node_t *wlist = NULL, *witer;
if((ret = regcomp(&r, name, REG_EXTENDED)))
{
regerror(ret, &r, error, sizeof(error));
luaL_error(L, "regex compilation error: %s\n", error);
}
lua_newtable(L); lua_newtable(L);
for(screen = 0; screen < globalconf.screens_info->nscreen; screen++) for(screen = 0; screen < globalconf.screens_info->nscreen; screen++)
for(sb = globalconf.screens[screen].statusbar; sb; sb = sb->next) for(sb = globalconf.screens[screen].statusbar; sb; sb = sb->next)
for(widget = sb->widgets; widget; widget = widget->next) for(widget = sb->widgets; widget; widget = widget->next)
if(!regexec(&r, widget->widget->name, 1, &match, 0)) {
{ for(witer = wlist; witer; witer = witer->next)
for(witer = wlist; witer; witer = witer->next) if(witer->widget == widget->widget)
if(witer->widget == widget->widget)
{
add = false;
break;
}
if(add)
{ {
witer = p_new(widget_node_t, 1); add = false;
wobj = lua_newuserdata(L, sizeof(tag_t *)); break;
witer->widget = *wobj = widget->widget;
widget_ref(&widget->widget);
widget_node_list_push(&wlist, witer);
/* ref again for the list */
widget_ref(&widget->widget);
luaA_settype(L, "widget");
lua_rawseti(L, -2, i++);
} }
add = true; if(add)
{
witer = p_new(widget_node_t, 1);
wobj = lua_newuserdata(L, sizeof(tag_t *));
witer->widget = *wobj = widget->widget;
widget_ref(&widget->widget);
widget_node_list_push(&wlist, witer);
/* ref again for the list */
widget_ref(&widget->widget);
luaA_settype(L, "widget");
lua_rawseti(L, -2, i++);
} }
add = true;
}
widget_node_list_wipe(&wlist); widget_node_list_wipe(&wlist);