mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
cvsimport
This commit is contained in:
commit
1fd3fc4997
30
calmwm.h
30
calmwm.h
@ -106,6 +106,11 @@ union arg {
|
|||||||
int i;
|
int i;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union press {
|
||||||
|
KeySym keysym;
|
||||||
|
unsigned int button;
|
||||||
|
};
|
||||||
|
|
||||||
enum cursor_font {
|
enum cursor_font {
|
||||||
CF_DEFAULT,
|
CF_DEFAULT,
|
||||||
CF_MOVE,
|
CF_MOVE,
|
||||||
@ -259,26 +264,17 @@ struct screen_ctx {
|
|||||||
};
|
};
|
||||||
TAILQ_HEAD(screen_ctx_q, screen_ctx);
|
TAILQ_HEAD(screen_ctx_q, screen_ctx);
|
||||||
|
|
||||||
struct keybinding {
|
struct binding {
|
||||||
TAILQ_ENTRY(keybinding) entry;
|
TAILQ_ENTRY(binding) entry;
|
||||||
void (*callback)(struct client_ctx *, union arg *);
|
void (*callback)(struct client_ctx *, union arg *);
|
||||||
union arg argument;
|
union arg argument;
|
||||||
unsigned int modmask;
|
unsigned int modmask;
|
||||||
KeySym keysym;
|
union press press;
|
||||||
int flags;
|
int flags;
|
||||||
int argtype;
|
int argtype;
|
||||||
};
|
};
|
||||||
TAILQ_HEAD(keybinding_q, keybinding);
|
TAILQ_HEAD(keybinding_q, binding);
|
||||||
|
TAILQ_HEAD(mousebinding_q, binding);
|
||||||
struct mousebinding {
|
|
||||||
TAILQ_ENTRY(mousebinding) entry;
|
|
||||||
void (*callback)(struct client_ctx *, union arg *);
|
|
||||||
union arg argument;
|
|
||||||
unsigned int modmask;
|
|
||||||
unsigned int button;
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
TAILQ_HEAD(mousebinding_q, mousebinding);
|
|
||||||
|
|
||||||
struct cmd {
|
struct cmd {
|
||||||
TAILQ_ENTRY(cmd) entry;
|
TAILQ_ENTRY(cmd) entry;
|
||||||
@ -302,10 +298,10 @@ TAILQ_HEAD(menu_q, menu);
|
|||||||
|
|
||||||
struct conf {
|
struct conf {
|
||||||
struct keybinding_q keybindingq;
|
struct keybinding_q keybindingq;
|
||||||
|
struct mousebinding_q mousebindingq;
|
||||||
struct autogroupwin_q autogroupq;
|
struct autogroupwin_q autogroupq;
|
||||||
struct winmatch_q ignoreq;
|
struct winmatch_q ignoreq;
|
||||||
struct cmd_q cmdq;
|
struct cmd_q cmdq;
|
||||||
struct mousebinding_q mousebindingq;
|
|
||||||
#define CONF_STICKY_GROUPS 0x0001
|
#define CONF_STICKY_GROUPS 0x0001
|
||||||
int flags;
|
int flags;
|
||||||
#define CONF_BWIDTH 1
|
#define CONF_BWIDTH 1
|
||||||
@ -493,7 +489,7 @@ void kbfunc_cmdexec(struct client_ctx *, union arg *);
|
|||||||
void kbfunc_cwm_status(struct client_ctx *, union arg *);
|
void kbfunc_cwm_status(struct client_ctx *, union arg *);
|
||||||
void kbfunc_exec(struct client_ctx *, union arg *);
|
void kbfunc_exec(struct client_ctx *, union arg *);
|
||||||
void kbfunc_lock(struct client_ctx *, union arg *);
|
void kbfunc_lock(struct client_ctx *, union arg *);
|
||||||
void kbfunc_menu_search(struct client_ctx *, union arg *);
|
void kbfunc_menu_cmd(struct client_ctx *, union arg *);
|
||||||
void kbfunc_ssh(struct client_ctx *, union arg *);
|
void kbfunc_ssh(struct client_ctx *, union arg *);
|
||||||
void kbfunc_term(struct client_ctx *, union arg *);
|
void kbfunc_term(struct client_ctx *, union arg *);
|
||||||
void kbfunc_tile(struct client_ctx *, union arg *);
|
void kbfunc_tile(struct client_ctx *, union arg *);
|
||||||
@ -534,7 +530,7 @@ int conf_bind_mouse(struct conf *, const char *,
|
|||||||
const char *);
|
const char *);
|
||||||
void conf_clear(struct conf *);
|
void conf_clear(struct conf *);
|
||||||
void conf_client(struct client_ctx *);
|
void conf_client(struct client_ctx *);
|
||||||
void conf_cmd_add(struct conf *, const char *,
|
int conf_cmd_add(struct conf *, const char *,
|
||||||
const char *);
|
const char *);
|
||||||
void conf_cursor(struct conf *);
|
void conf_cursor(struct conf *);
|
||||||
void conf_grab_kbd(Window);
|
void conf_grab_kbd(Window);
|
||||||
|
98
conf.c
98
conf.c
@ -32,26 +32,52 @@
|
|||||||
#include "calmwm.h"
|
#include "calmwm.h"
|
||||||
|
|
||||||
static const char *conf_bind_getmask(const char *, unsigned int *);
|
static const char *conf_bind_getmask(const char *, unsigned int *);
|
||||||
static void conf_unbind_kbd(struct conf *, struct keybinding *);
|
static void conf_cmd_remove(struct conf *, const char *);
|
||||||
static void conf_unbind_mouse(struct conf *, struct mousebinding *);
|
static void conf_unbind_kbd(struct conf *, struct binding *);
|
||||||
|
static void conf_unbind_mouse(struct conf *, struct binding *);
|
||||||
|
|
||||||
/* Add an command menu entry to the end of the menu */
|
int
|
||||||
void
|
|
||||||
conf_cmd_add(struct conf *c, const char *name, const char *path)
|
conf_cmd_add(struct conf *c, const char *name, const char *path)
|
||||||
{
|
{
|
||||||
|
struct cmd *cmd;
|
||||||
|
|
||||||
/* "term" and "lock" have special meanings. */
|
/* "term" and "lock" have special meanings. */
|
||||||
if (strcmp(name, "term") == 0)
|
if (strcmp(name, "term") == 0) {
|
||||||
(void)strlcpy(c->termpath, path, sizeof(c->termpath));
|
if (strlcpy(c->termpath, path, sizeof(c->termpath)) >=
|
||||||
else if (strcmp(name, "lock") == 0)
|
sizeof(c->termpath))
|
||||||
(void)strlcpy(c->lockpath, path, sizeof(c->lockpath));
|
return (0);
|
||||||
else {
|
} else if (strcmp(name, "lock") == 0) {
|
||||||
struct cmd *cmd = xmalloc(sizeof(*cmd));
|
if (strlcpy(c->lockpath, path, sizeof(c->lockpath)) >=
|
||||||
(void)strlcpy(cmd->name, name, sizeof(cmd->name));
|
sizeof(c->lockpath))
|
||||||
(void)strlcpy(cmd->path, path, sizeof(cmd->path));
|
return (0);
|
||||||
|
} else {
|
||||||
|
cmd = xmalloc(sizeof(*cmd));
|
||||||
|
|
||||||
|
conf_cmd_remove(c, name);
|
||||||
|
|
||||||
|
if (strlcpy(cmd->name, name, sizeof(cmd->name)) >=
|
||||||
|
sizeof(cmd->name))
|
||||||
|
return (0);
|
||||||
|
if (strlcpy(cmd->path, path, sizeof(cmd->path)) >=
|
||||||
|
sizeof(cmd->path))
|
||||||
|
return (0);
|
||||||
TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry);
|
TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry);
|
||||||
}
|
}
|
||||||
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
conf_cmd_remove(struct conf *c, const char *name)
|
||||||
|
{
|
||||||
|
struct cmd *cmd = NULL, *cmdnxt;
|
||||||
|
|
||||||
|
TAILQ_FOREACH_SAFE(cmd, &c->cmdq, entry, cmdnxt) {
|
||||||
|
if (strcmp(cmd->name, name) == 0) {
|
||||||
|
TAILQ_REMOVE(&c->cmdq, cmd, entry);
|
||||||
|
free(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
void
|
void
|
||||||
conf_autogroup(struct conf *c, int no, const char *val)
|
conf_autogroup(struct conf *c, int no, const char *val)
|
||||||
{
|
{
|
||||||
@ -249,9 +275,8 @@ conf_init(struct conf *c)
|
|||||||
for (i = 0; i < nitems(color_binds); i++)
|
for (i = 0; i < nitems(color_binds); i++)
|
||||||
c->color[i] = xstrdup(color_binds[i]);
|
c->color[i] = xstrdup(color_binds[i]);
|
||||||
|
|
||||||
/* Default term/lock */
|
conf_cmd_add(c, "lock", "xlock");
|
||||||
(void)strlcpy(c->termpath, "xterm", sizeof(c->termpath));
|
conf_cmd_add(c, "term", "xterm");
|
||||||
(void)strlcpy(c->lockpath, "xlock", sizeof(c->lockpath));
|
|
||||||
|
|
||||||
(void)snprintf(c->known_hosts, sizeof(c->known_hosts), "%s/%s",
|
(void)snprintf(c->known_hosts, sizeof(c->known_hosts), "%s/%s",
|
||||||
homedir, ".ssh/known_hosts");
|
homedir, ".ssh/known_hosts");
|
||||||
@ -263,10 +288,9 @@ void
|
|||||||
conf_clear(struct conf *c)
|
conf_clear(struct conf *c)
|
||||||
{
|
{
|
||||||
struct autogroupwin *ag;
|
struct autogroupwin *ag;
|
||||||
struct keybinding *kb;
|
struct binding *kb, *mb;
|
||||||
struct winmatch *wm;
|
struct winmatch *wm;
|
||||||
struct cmd *cmd;
|
struct cmd *cmd;
|
||||||
struct mousebinding *mb;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) {
|
while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) {
|
||||||
@ -329,7 +353,7 @@ static const struct {
|
|||||||
{ "lower", kbfunc_client_lower, CWM_WIN, {0} },
|
{ "lower", kbfunc_client_lower, CWM_WIN, {0} },
|
||||||
{ "raise", kbfunc_client_raise, CWM_WIN, {0} },
|
{ "raise", kbfunc_client_raise, CWM_WIN, {0} },
|
||||||
{ "search", kbfunc_client_search, 0, {0} },
|
{ "search", kbfunc_client_search, 0, {0} },
|
||||||
{ "menusearch", kbfunc_menu_search, 0, {0} },
|
{ "menusearch", kbfunc_menu_cmd, 0, {0} },
|
||||||
{ "hide", kbfunc_client_hide, CWM_WIN, {0} },
|
{ "hide", kbfunc_client_hide, CWM_WIN, {0} },
|
||||||
{ "cycle", kbfunc_client_cycle, 0, {.i = CWM_CYCLE} },
|
{ "cycle", kbfunc_client_cycle, 0, {.i = CWM_CYCLE} },
|
||||||
{ "rcycle", kbfunc_client_cycle, 0, {.i = CWM_RCYCLE} },
|
{ "rcycle", kbfunc_client_cycle, 0, {.i = CWM_RCYCLE} },
|
||||||
@ -466,16 +490,16 @@ conf_bind_getmask(const char *name, unsigned int *mask)
|
|||||||
int
|
int
|
||||||
conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
|
conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
|
||||||
{
|
{
|
||||||
struct keybinding *kb;
|
struct binding *kb;
|
||||||
const char *key;
|
const char *key;
|
||||||
unsigned int i, mask;
|
unsigned int i, mask;
|
||||||
|
|
||||||
kb = xcalloc(1, sizeof(*kb));
|
kb = xcalloc(1, sizeof(*kb));
|
||||||
key = conf_bind_getmask(bind, &mask);
|
key = conf_bind_getmask(bind, &mask);
|
||||||
kb->modmask |= mask;
|
kb->modmask |= mask;
|
||||||
|
|
||||||
kb->keysym = XStringToKeysym(key);
|
kb->press.keysym = XStringToKeysym(key);
|
||||||
if (kb->keysym == NoSymbol) {
|
if (kb->press.keysym == NoSymbol) {
|
||||||
warnx("unknown symbol: %s", key);
|
warnx("unknown symbol: %s", key);
|
||||||
free(kb);
|
free(kb);
|
||||||
return (0);
|
return (0);
|
||||||
@ -510,15 +534,15 @@ conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
conf_unbind_kbd(struct conf *c, struct keybinding *unbind)
|
conf_unbind_kbd(struct conf *c, struct binding *unbind)
|
||||||
{
|
{
|
||||||
struct keybinding *key = NULL, *keynxt;
|
struct binding *key = NULL, *keynxt;
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(key, &c->keybindingq, entry, keynxt) {
|
TAILQ_FOREACH_SAFE(key, &c->keybindingq, entry, keynxt) {
|
||||||
if (key->modmask != unbind->modmask)
|
if (key->modmask != unbind->modmask)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (key->keysym == unbind->keysym) {
|
if (key->press.keysym == unbind->press.keysym) {
|
||||||
TAILQ_REMOVE(&c->keybindingq, key, entry);
|
TAILQ_REMOVE(&c->keybindingq, key, entry);
|
||||||
if (key->argtype & ARG_CHAR)
|
if (key->argtype & ARG_CHAR)
|
||||||
free(key->argument.c);
|
free(key->argument.c);
|
||||||
@ -549,15 +573,15 @@ static const struct {
|
|||||||
int
|
int
|
||||||
conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
|
conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
|
||||||
{
|
{
|
||||||
struct mousebinding *mb;
|
struct binding *mb;
|
||||||
const char *button, *errstr;
|
const char *button, *errstr;
|
||||||
unsigned int i, mask;
|
unsigned int i, mask;
|
||||||
|
|
||||||
mb = xcalloc(1, sizeof(*mb));
|
mb = xcalloc(1, sizeof(*mb));
|
||||||
button = conf_bind_getmask(bind, &mask);
|
button = conf_bind_getmask(bind, &mask);
|
||||||
mb->modmask |= mask;
|
mb->modmask |= mask;
|
||||||
|
|
||||||
mb->button = strtonum(button, Button1, Button5, &errstr);
|
mb->press.button = strtonum(button, Button1, Button5, &errstr);
|
||||||
if (errstr) {
|
if (errstr) {
|
||||||
warnx("button number is %s: %s", errstr, button);
|
warnx("button number is %s: %s", errstr, button);
|
||||||
free(mb);
|
free(mb);
|
||||||
@ -587,15 +611,15 @@ conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
conf_unbind_mouse(struct conf *c, struct mousebinding *unbind)
|
conf_unbind_mouse(struct conf *c, struct binding *unbind)
|
||||||
{
|
{
|
||||||
struct mousebinding *mb = NULL, *mbnxt;
|
struct binding *mb = NULL, *mbnxt;
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(mb, &c->mousebindingq, entry, mbnxt) {
|
TAILQ_FOREACH_SAFE(mb, &c->mousebindingq, entry, mbnxt) {
|
||||||
if (mb->modmask != unbind->modmask)
|
if (mb->modmask != unbind->modmask)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mb->button == unbind->button) {
|
if (mb->press.button == unbind->press.button) {
|
||||||
TAILQ_REMOVE(&c->mousebindingq, mb, entry);
|
TAILQ_REMOVE(&c->mousebindingq, mb, entry);
|
||||||
free(mb);
|
free(mb);
|
||||||
}
|
}
|
||||||
@ -622,25 +646,25 @@ conf_cursor(struct conf *c)
|
|||||||
void
|
void
|
||||||
conf_grab_mouse(Window win)
|
conf_grab_mouse(Window win)
|
||||||
{
|
{
|
||||||
struct mousebinding *mb;
|
struct binding *mb;
|
||||||
|
|
||||||
xu_btn_ungrab(win);
|
xu_btn_ungrab(win);
|
||||||
|
|
||||||
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
|
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
|
||||||
if (mb->flags & CWM_WIN)
|
if (mb->flags & CWM_WIN)
|
||||||
xu_btn_grab(win, mb->modmask, mb->button);
|
xu_btn_grab(win, mb->modmask, mb->press.button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
conf_grab_kbd(Window win)
|
conf_grab_kbd(Window win)
|
||||||
{
|
{
|
||||||
struct keybinding *kb;
|
struct binding *kb;
|
||||||
|
|
||||||
xu_key_ungrab(win);
|
xu_key_ungrab(win);
|
||||||
|
|
||||||
TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
|
TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
|
||||||
xu_key_grab(win, kb->modmask, kb->keysym);
|
xu_key_grab(win, kb->modmask, kb->press.keysym);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *cwmhints[] = {
|
static char *cwmhints[] = {
|
||||||
|
14
cwmrc.5
14
cwmrc.5
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: December 13 2013 $
|
.Dd $Mdocdate: December 16 2013 $
|
||||||
.Dt CWMRC 5
|
.Dt CWMRC 5
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -64,8 +64,8 @@ are both set in the WM_CLASS property and may be obtained using
|
|||||||
.Xr xprop 1 .
|
.Xr xprop 1 .
|
||||||
.Pp
|
.Pp
|
||||||
.It Ic bind Ar keys command
|
.It Ic bind Ar keys command
|
||||||
Cause the creation of a keybinding, or replacement of a default
|
Cause the creation of a key binding, or replacement of a default
|
||||||
keybinding.
|
key binding.
|
||||||
The modifier keys come first, followed by a
|
The modifier keys come first, followed by a
|
||||||
.Sq - .
|
.Sq - .
|
||||||
.Pp
|
.Pp
|
||||||
@ -96,7 +96,7 @@ A special
|
|||||||
.Ar command
|
.Ar command
|
||||||
keyword
|
keyword
|
||||||
.Dq unmap
|
.Dq unmap
|
||||||
can be used to remove the named keybinding.
|
can be used to remove the named key binding.
|
||||||
This can be used to remove a binding which conflicts with an
|
This can be used to remove a binding which conflicts with an
|
||||||
application.
|
application.
|
||||||
.Pp
|
.Pp
|
||||||
@ -148,7 +148,7 @@ and
|
|||||||
.Nm lock
|
.Nm lock
|
||||||
have a special meaning.
|
have a special meaning.
|
||||||
They point to the terminal and screen locking programs specified by
|
They point to the terminal and screen locking programs specified by
|
||||||
keybindings.
|
key bindings.
|
||||||
The defaults are
|
The defaults are
|
||||||
.Xr xterm 1
|
.Xr xterm 1
|
||||||
and
|
and
|
||||||
@ -258,7 +258,7 @@ ignore xwi
|
|||||||
ignore xapm
|
ignore xapm
|
||||||
ignore xclock
|
ignore xclock
|
||||||
|
|
||||||
# Keybindings
|
# Key bindings
|
||||||
bind CM-r label
|
bind CM-r label
|
||||||
bind CS-Return "xterm -e top"
|
bind CS-Return "xterm -e top"
|
||||||
bind 4-o unmap
|
bind 4-o unmap
|
||||||
@ -273,7 +273,7 @@ bind MS-1 movetogroup1
|
|||||||
bind MS-2 movetogroup2
|
bind MS-2 movetogroup2
|
||||||
bind MS-3 movetogroup3
|
bind MS-3 movetogroup3
|
||||||
|
|
||||||
# Mousebindings
|
# Mouse bindings
|
||||||
mousebind M-2 window_lower
|
mousebind M-2 window_lower
|
||||||
mousebind M-3 window_resize
|
mousebind M-3 window_resize
|
||||||
.Ed
|
.Ed
|
||||||
|
2
kbfunc.c
2
kbfunc.c
@ -167,7 +167,7 @@ kbfunc_client_search(struct client_ctx *cc, union arg *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
kbfunc_menu_search(struct client_ctx *cc, union arg *arg)
|
kbfunc_menu_cmd(struct client_ctx *cc, union arg *arg)
|
||||||
{
|
{
|
||||||
struct screen_ctx *sc = cc->sc;
|
struct screen_ctx *sc = cc->sc;
|
||||||
struct cmd *cmd;
|
struct cmd *cmd;
|
||||||
|
13
mousefunc.c
13
mousefunc.c
@ -221,7 +221,6 @@ mousefunc_menu_unhide(struct client_ctx *cc, union arg *arg)
|
|||||||
old_cc = client_current();
|
old_cc = client_current();
|
||||||
|
|
||||||
TAILQ_INIT(&menuq);
|
TAILQ_INIT(&menuq);
|
||||||
|
|
||||||
TAILQ_FOREACH(cc, &Clientq, entry)
|
TAILQ_FOREACH(cc, &Clientq, entry)
|
||||||
if (cc->flags & CLIENT_HIDDEN) {
|
if (cc->flags & CLIENT_HIDDEN) {
|
||||||
wname = (cc->label) ? cc->label : cc->name;
|
wname = (cc->label) ? cc->label : cc->name;
|
||||||
@ -235,8 +234,8 @@ mousefunc_menu_unhide(struct client_ctx *cc, union arg *arg)
|
|||||||
if (TAILQ_EMPTY(&menuq))
|
if (TAILQ_EMPTY(&menuq))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mi = menu_filter(sc, &menuq, NULL, NULL, 0, NULL, NULL);
|
if ((mi = menu_filter(sc, &menuq, NULL, NULL, 0,
|
||||||
if (mi != NULL) {
|
NULL, NULL)) != NULL) {
|
||||||
cc = (struct client_ctx *)mi->ctx;
|
cc = (struct client_ctx *)mi->ctx;
|
||||||
client_unhide(cc);
|
client_unhide(cc);
|
||||||
|
|
||||||
@ -252,19 +251,19 @@ void
|
|||||||
mousefunc_menu_cmd(struct client_ctx *cc, union arg *arg)
|
mousefunc_menu_cmd(struct client_ctx *cc, union arg *arg)
|
||||||
{
|
{
|
||||||
struct screen_ctx *sc = cc->sc;
|
struct screen_ctx *sc = cc->sc;
|
||||||
|
struct cmd *cmd;
|
||||||
struct menu *mi;
|
struct menu *mi;
|
||||||
struct menu_q menuq;
|
struct menu_q menuq;
|
||||||
struct cmd *cmd;
|
|
||||||
|
|
||||||
TAILQ_INIT(&menuq);
|
TAILQ_INIT(&menuq);
|
||||||
|
|
||||||
TAILQ_FOREACH(cmd, &Conf.cmdq, entry)
|
TAILQ_FOREACH(cmd, &Conf.cmdq, entry)
|
||||||
menuq_add(&menuq, cmd, "%s", cmd->name);
|
menuq_add(&menuq, cmd, "%s", cmd->name);
|
||||||
|
|
||||||
if (TAILQ_EMPTY(&menuq))
|
if (TAILQ_EMPTY(&menuq))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mi = menu_filter(sc, &menuq, NULL, NULL, 0, NULL, NULL);
|
if ((mi = menu_filter(sc, &menuq, NULL, NULL, 0,
|
||||||
if (mi != NULL)
|
NULL, NULL)) != NULL)
|
||||||
u_spawn(((struct cmd *)mi->ctx)->path);
|
u_spawn(((struct cmd *)mi->ctx)->path);
|
||||||
|
|
||||||
menuq_clear(&menuq);
|
menuq_clear(&menuq);
|
||||||
|
7
parse.y
7
parse.y
@ -139,7 +139,12 @@ main : FONTNAME STRING {
|
|||||||
conf->snapdist = $2;
|
conf->snapdist = $2;
|
||||||
}
|
}
|
||||||
| COMMAND STRING string {
|
| COMMAND STRING string {
|
||||||
conf_cmd_add(conf, $2, $3);
|
if (!conf_cmd_add(conf, $2, $3)) {
|
||||||
|
yyerror("command name/path too long");
|
||||||
|
free($2);
|
||||||
|
free($3);
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
free($2);
|
free($2);
|
||||||
free($3);
|
free($3);
|
||||||
}
|
}
|
||||||
|
10
xevents.c
10
xevents.c
@ -224,12 +224,12 @@ xev_handle_buttonpress(XEvent *ee)
|
|||||||
{
|
{
|
||||||
XButtonEvent *e = &ee->xbutton;
|
XButtonEvent *e = &ee->xbutton;
|
||||||
struct client_ctx *cc, fakecc;
|
struct client_ctx *cc, fakecc;
|
||||||
struct mousebinding *mb;
|
struct binding *mb;
|
||||||
|
|
||||||
e->state &= ~IGNOREMODMASK;
|
e->state &= ~IGNOREMODMASK;
|
||||||
|
|
||||||
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
|
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
|
||||||
if (e->button == mb->button && e->state == mb->modmask)
|
if (e->button == mb->press.button && e->state == mb->modmask)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ xev_handle_keypress(XEvent *ee)
|
|||||||
{
|
{
|
||||||
XKeyEvent *e = &ee->xkey;
|
XKeyEvent *e = &ee->xkey;
|
||||||
struct client_ctx *cc = NULL, fakecc;
|
struct client_ctx *cc = NULL, fakecc;
|
||||||
struct keybinding *kb;
|
struct binding *kb;
|
||||||
KeySym keysym, skeysym;
|
KeySym keysym, skeysym;
|
||||||
unsigned int modshift;
|
unsigned int modshift;
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ xev_handle_keypress(XEvent *ee)
|
|||||||
e->state &= ~IGNOREMODMASK;
|
e->state &= ~IGNOREMODMASK;
|
||||||
|
|
||||||
TAILQ_FOREACH(kb, &Conf.keybindingq, entry) {
|
TAILQ_FOREACH(kb, &Conf.keybindingq, entry) {
|
||||||
if (keysym != kb->keysym && skeysym == kb->keysym)
|
if (keysym != kb->press.keysym && skeysym == kb->press.keysym)
|
||||||
modshift = ShiftMask;
|
modshift = ShiftMask;
|
||||||
else
|
else
|
||||||
modshift = 0;
|
modshift = 0;
|
||||||
@ -281,7 +281,7 @@ xev_handle_keypress(XEvent *ee)
|
|||||||
if ((kb->modmask | modshift) != e->state)
|
if ((kb->modmask | modshift) != e->state)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (kb->keysym == (modshift == 0 ? keysym : skeysym))
|
if (kb->press.keysym == (modshift == 0 ? keysym : skeysym))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user