cvsimport
* refs/heads/master: (28 commits) Use screen's saved view instead of re-querying the server. Slightly expand and expose verbose debugging. add debugging for x events Add a simple debug logging mechanism. Simplification; use asprintf where appropriate now. Use func attributes where appropriate. Fix wins comparison declaration since it's unsigned from XQueryTree(). Generate name_to_func[] in a clean and readable fashion. Shrink tier[] by one after removing matchname in r1.55. If the requested group number is invalid, bail but don't kill cwm. Quick fix: exit after a failed execvp in u_spawn instead; previously we did in u_exec, but the introduction of re-exec'ing the previous invocation of cwm if 'exec_wm' failed missed the 'exec' failing path. Will likely split out as a proper fix. Only exec the fallback when in CWM_EXEC_WM state. Typo, from Julien Steinhauser. Convert menu-exec-wm from an abritrary exec menu, into a config-based menu from which one may configure (wm <name> <path_and_args>) (and choose) specific window managers to replace the running one. 'wm cwm cwm' is included by default. As done for buttonrelease, work specific un-cycling and un-highlighting actions into the keyrelease event, only performing what's actually needed for each; should result in much fewer events against keyreleases. No intended behaviour change. Merge group_toggle_membership_leave into the buttonrelease event and only do border work for a group/ungroup action. add helper function client_show to bring together like actions for unhide/raise Add support for re-exec'ing with SIGHUP; equivalent to the already built-in 'restart' function. Use poll and XNextEvent to replace XNextEvent blocking inside the x11 event handler. zap stray that snuck in ...
This commit is contained in:
58
search.c
58
search.c
@@ -69,15 +69,16 @@ match_substr(char *sub, char *str, int zeroidx)
|
||||
void
|
||||
search_match_client(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
{
|
||||
struct winname *wn;
|
||||
struct menu *mi, *tierp[4], *before = NULL;
|
||||
struct menu *mi, *tierp[3], *before = NULL;
|
||||
struct client_ctx *cc;
|
||||
struct winname *wn;
|
||||
|
||||
(void)memset(tierp, 0, sizeof(tierp));
|
||||
|
||||
TAILQ_INIT(resultq);
|
||||
TAILQ_FOREACH(mi, menuq, entry) {
|
||||
int tier = -1, t;
|
||||
struct client_ctx *cc = (struct client_ctx *)mi->ctx;
|
||||
cc = (struct client_ctx *)mi->ctx;
|
||||
|
||||
/* Match on label. */
|
||||
if (match_substr(search, cc->label, 0))
|
||||
@@ -87,14 +88,14 @@ search_match_client(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
if (tier < 0) {
|
||||
TAILQ_FOREACH_REVERSE(wn, &cc->nameq, name_q, entry)
|
||||
if (match_substr(search, wn->name, 0)) {
|
||||
tier = 2;
|
||||
tier = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Match on window resource class. */
|
||||
if ((tier < 0) && match_substr(search, cc->ch.res_class, 0))
|
||||
tier = 3;
|
||||
tier = 2;
|
||||
|
||||
if (tier < 0)
|
||||
continue;
|
||||
@@ -107,9 +108,6 @@ search_match_client(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
if ((tier > 0) && (cc->flags & CLIENT_HIDDEN))
|
||||
tier--;
|
||||
|
||||
if (tier >= nitems(tierp))
|
||||
errx(1, "%s: invalid tier", __func__);
|
||||
|
||||
/*
|
||||
* If you have a tierp, insert after it, and make it
|
||||
* the new tierp. If you don't have a tierp, find the
|
||||
@@ -132,11 +130,12 @@ search_match_client(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
void
|
||||
search_match_cmd(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
{
|
||||
struct menu *mi;
|
||||
struct menu *mi;
|
||||
struct cmd_ctx *cmd;
|
||||
|
||||
TAILQ_INIT(resultq);
|
||||
TAILQ_FOREACH(mi, menuq, entry) {
|
||||
struct cmd_ctx *cmd = (struct cmd_ctx *)mi->ctx;
|
||||
cmd = (struct cmd_ctx *)mi->ctx;
|
||||
if (match_substr(search, cmd->name, 0))
|
||||
TAILQ_INSERT_TAIL(resultq, mi, resultentry);
|
||||
}
|
||||
@@ -145,12 +144,13 @@ search_match_cmd(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
void
|
||||
search_match_group(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
{
|
||||
struct menu *mi;
|
||||
char *s;
|
||||
struct menu *mi;
|
||||
struct group_ctx *gc;
|
||||
char *s;
|
||||
|
||||
TAILQ_INIT(resultq);
|
||||
TAILQ_FOREACH(mi, menuq, entry) {
|
||||
struct group_ctx *gc = (struct group_ctx *)mi->ctx;
|
||||
gc = (struct group_ctx *)mi->ctx;
|
||||
xasprintf(&s, "%d %s", gc->num, gc->name);
|
||||
if (match_substr(search, s, 0))
|
||||
TAILQ_INSERT_TAIL(resultq, mi, resultentry);
|
||||
@@ -162,12 +162,11 @@ static void
|
||||
match_path_type(struct menu_q *resultq, char *search, int flag)
|
||||
{
|
||||
struct menu *mi;
|
||||
char pattern[PATH_MAX];
|
||||
char *pattern;
|
||||
glob_t g;
|
||||
int i;
|
||||
|
||||
(void)strlcpy(pattern, search, sizeof(pattern));
|
||||
(void)strlcat(pattern, "*", sizeof(pattern));
|
||||
xasprintf(&pattern, "%s*", search);
|
||||
if (glob(pattern, GLOB_MARK, NULL, &g) != 0)
|
||||
return;
|
||||
for (i = 0; i < g.gl_pathc; i++) {
|
||||
@@ -178,6 +177,7 @@ match_path_type(struct menu_q *resultq, char *search, int flag)
|
||||
TAILQ_INSERT_TAIL(resultq, mi, resultentry);
|
||||
}
|
||||
globfree(&g);
|
||||
free(pattern);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -224,6 +224,21 @@ search_match_text(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
search_match_wm(struct menu_q *menuq, struct menu_q *resultq, char *search)
|
||||
{
|
||||
struct menu *mi;
|
||||
struct cmd_ctx *wm;
|
||||
|
||||
TAILQ_INIT(resultq);
|
||||
TAILQ_FOREACH(mi, menuq, entry) {
|
||||
wm = (struct cmd_ctx *)mi->ctx;
|
||||
if ((match_substr(search, wm->name, 0)) ||
|
||||
(match_substr(search, wm->path, 0)))
|
||||
TAILQ_INSERT_TAIL(resultq, mi, resultentry);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
search_print_client(struct menu *mi, int listing)
|
||||
{
|
||||
@@ -243,7 +258,7 @@ search_print_client(struct menu *mi, int listing)
|
||||
void
|
||||
search_print_cmd(struct menu *mi, int listing)
|
||||
{
|
||||
struct cmd_ctx *cmd = (struct cmd_ctx *)mi->ctx;
|
||||
struct cmd_ctx *cmd = (struct cmd_ctx *)mi->ctx;
|
||||
|
||||
(void)snprintf(mi->print, sizeof(mi->print), "%s", cmd->name);
|
||||
}
|
||||
@@ -263,3 +278,12 @@ search_print_text(struct menu *mi, int listing)
|
||||
{
|
||||
(void)snprintf(mi->print, sizeof(mi->print), "%s", mi->text);
|
||||
}
|
||||
|
||||
void
|
||||
search_print_wm(struct menu *mi, int listing)
|
||||
{
|
||||
struct cmd_ctx *wm = (struct cmd_ctx *)mi->ctx;
|
||||
|
||||
(void)snprintf(mi->print, sizeof(mi->print), "%s [%s]",
|
||||
wm->name, wm->path);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user