Skip to content

Commit

Permalink
cvsimport
Browse files Browse the repository at this point in the history
  • Loading branch information
okan committed Jan 29, 2014
2 parents 2b233f0 + 2be8904 commit 1fd3fc4
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 75 deletions.
30 changes: 13 additions & 17 deletions calmwm.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ union arg {
int i;
};

union press {
KeySym keysym;
unsigned int button;
};

enum cursor_font {
CF_DEFAULT,
CF_MOVE,
Expand Down Expand Up @@ -259,26 +264,17 @@ struct screen_ctx {
};
TAILQ_HEAD(screen_ctx_q, screen_ctx);

struct keybinding {
TAILQ_ENTRY(keybinding) entry;
struct binding {
TAILQ_ENTRY(binding) entry;
void (*callback)(struct client_ctx *, union arg *);
union arg argument;
unsigned int modmask;
KeySym keysym;
union press press;
int flags;
int argtype;
};
TAILQ_HEAD(keybinding_q, keybinding);

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);
TAILQ_HEAD(keybinding_q, binding);
TAILQ_HEAD(mousebinding_q, binding);

struct cmd {
TAILQ_ENTRY(cmd) entry;
Expand All @@ -302,10 +298,10 @@ TAILQ_HEAD(menu_q, menu);

struct conf {
struct keybinding_q keybindingq;
struct mousebinding_q mousebindingq;
struct autogroupwin_q autogroupq;
struct winmatch_q ignoreq;
struct cmd_q cmdq;
struct mousebinding_q mousebindingq;
#define CONF_STICKY_GROUPS 0x0001
int flags;
#define CONF_BWIDTH 1
Expand Down Expand Up @@ -493,7 +489,7 @@ void kbfunc_cmdexec(struct client_ctx *, union arg *);
void kbfunc_cwm_status(struct client_ctx *, union arg *);
void kbfunc_exec(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_term(struct client_ctx *, union arg *);
void kbfunc_tile(struct client_ctx *, union arg *);
Expand Down Expand Up @@ -534,7 +530,7 @@ int conf_bind_mouse(struct conf *, const char *,
const char *);
void conf_clear(struct conf *);
void conf_client(struct client_ctx *);
void conf_cmd_add(struct conf *, const char *,
int conf_cmd_add(struct conf *, const char *,
const char *);
void conf_cursor(struct conf *);
void conf_grab_kbd(Window);
Expand Down
98 changes: 61 additions & 37 deletions conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,26 +32,52 @@
#include "calmwm.h"

static const char *conf_bind_getmask(const char *, unsigned int *);
static void conf_unbind_kbd(struct conf *, struct keybinding *);
static void conf_unbind_mouse(struct conf *, struct mousebinding *);
static void conf_cmd_remove(struct conf *, const char *);
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 */
void
int
conf_cmd_add(struct conf *c, const char *name, const char *path)
{
struct cmd *cmd;

/* "term" and "lock" have special meanings. */
if (strcmp(name, "term") == 0)
(void)strlcpy(c->termpath, path, sizeof(c->termpath));
else if (strcmp(name, "lock") == 0)
(void)strlcpy(c->lockpath, path, sizeof(c->lockpath));
else {
struct cmd *cmd = xmalloc(sizeof(*cmd));
(void)strlcpy(cmd->name, name, sizeof(cmd->name));
(void)strlcpy(cmd->path, path, sizeof(cmd->path));
if (strcmp(name, "term") == 0) {
if (strlcpy(c->termpath, path, sizeof(c->termpath)) >=
sizeof(c->termpath))
return (0);
} else if (strcmp(name, "lock") == 0) {
if (strlcpy(c->lockpath, path, sizeof(c->lockpath)) >=
sizeof(c->lockpath))
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);
}
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
conf_autogroup(struct conf *c, int no, const char *val)
{
Expand Down Expand Up @@ -249,9 +275,8 @@ conf_init(struct conf *c)
for (i = 0; i < nitems(color_binds); i++)
c->color[i] = xstrdup(color_binds[i]);

/* Default term/lock */
(void)strlcpy(c->termpath, "xterm", sizeof(c->termpath));
(void)strlcpy(c->lockpath, "xlock", sizeof(c->lockpath));
conf_cmd_add(c, "lock", "xlock");
conf_cmd_add(c, "term", "xterm");

(void)snprintf(c->known_hosts, sizeof(c->known_hosts), "%s/%s",
homedir, ".ssh/known_hosts");
Expand All @@ -263,10 +288,9 @@ void
conf_clear(struct conf *c)
{
struct autogroupwin *ag;
struct keybinding *kb;
struct binding *kb, *mb;
struct winmatch *wm;
struct cmd *cmd;
struct mousebinding *mb;
int i;

while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) {
Expand Down Expand Up @@ -329,7 +353,7 @@ static const struct {
{ "lower", kbfunc_client_lower, CWM_WIN, {0} },
{ "raise", kbfunc_client_raise, CWM_WIN, {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} },
{ "cycle", kbfunc_client_cycle, 0, {.i = CWM_CYCLE} },
{ "rcycle", kbfunc_client_cycle, 0, {.i = CWM_RCYCLE} },
Expand Down Expand Up @@ -466,16 +490,16 @@ conf_bind_getmask(const char *name, unsigned int *mask)
int
conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
{
struct keybinding *kb;
const char *key;
unsigned int i, mask;
struct binding *kb;
const char *key;
unsigned int i, mask;

kb = xcalloc(1, sizeof(*kb));
key = conf_bind_getmask(bind, &mask);
kb->modmask |= mask;

kb->keysym = XStringToKeysym(key);
if (kb->keysym == NoSymbol) {
kb->press.keysym = XStringToKeysym(key);
if (kb->press.keysym == NoSymbol) {
warnx("unknown symbol: %s", key);
free(kb);
return (0);
Expand Down Expand Up @@ -510,15 +534,15 @@ conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
}

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) {
if (key->modmask != unbind->modmask)
continue;

if (key->keysym == unbind->keysym) {
if (key->press.keysym == unbind->press.keysym) {
TAILQ_REMOVE(&c->keybindingq, key, entry);
if (key->argtype & ARG_CHAR)
free(key->argument.c);
Expand Down Expand Up @@ -549,15 +573,15 @@ static const struct {
int
conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
{
struct mousebinding *mb;
const char *button, *errstr;
unsigned int i, mask;
struct binding *mb;
const char *button, *errstr;
unsigned int i, mask;

mb = xcalloc(1, sizeof(*mb));
button = conf_bind_getmask(bind, &mask);
mb->modmask |= mask;

mb->button = strtonum(button, Button1, Button5, &errstr);
mb->press.button = strtonum(button, Button1, Button5, &errstr);
if (errstr) {
warnx("button number is %s: %s", errstr, button);
free(mb);
Expand Down Expand Up @@ -587,15 +611,15 @@ conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
}

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) {
if (mb->modmask != unbind->modmask)
continue;

if (mb->button == unbind->button) {
if (mb->press.button == unbind->press.button) {
TAILQ_REMOVE(&c->mousebindingq, mb, entry);
free(mb);
}
Expand All @@ -622,25 +646,25 @@ conf_cursor(struct conf *c)
void
conf_grab_mouse(Window win)
{
struct mousebinding *mb;
struct binding *mb;

xu_btn_ungrab(win);

TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
if (mb->flags & CWM_WIN)
xu_btn_grab(win, mb->modmask, mb->button);
xu_btn_grab(win, mb->modmask, mb->press.button);
}
}

void
conf_grab_kbd(Window win)
{
struct keybinding *kb;
struct binding *kb;

xu_key_ungrab(win);

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[] = {
Expand Down
14 changes: 7 additions & 7 deletions cwmrc.5
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
.Dd $Mdocdate: December 13 2013 $
.Dd $Mdocdate: December 16 2013 $
.Dt CWMRC 5
.Os
.Sh NAME
Expand Down Expand Up @@ -64,8 +64,8 @@ are both set in the WM_CLASS property and may be obtained using
.Xr xprop 1 .
.Pp
.It Ic bind Ar keys command
Cause the creation of a keybinding, or replacement of a default
keybinding.
Cause the creation of a key binding, or replacement of a default
key binding.
The modifier keys come first, followed by a
.Sq - .
.Pp
Expand Down Expand Up @@ -96,7 +96,7 @@ A special
.Ar command
keyword
.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
application.
.Pp
Expand Down Expand Up @@ -148,7 +148,7 @@ and
.Nm lock
have a special meaning.
They point to the terminal and screen locking programs specified by
keybindings.
key bindings.
The defaults are
.Xr xterm 1
and
Expand Down Expand Up @@ -258,7 +258,7 @@ ignore xwi
ignore xapm
ignore xclock

# Keybindings
# Key bindings
bind CM-r label
bind CS-Return "xterm -e top"
bind 4-o unmap
Expand All @@ -273,7 +273,7 @@ bind MS-1 movetogroup1
bind MS-2 movetogroup2
bind MS-3 movetogroup3

# Mousebindings
# Mouse bindings
mousebind M-2 window_lower
mousebind M-3 window_resize
.Ed
Expand Down
2 changes: 1 addition & 1 deletion kbfunc.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ kbfunc_client_search(struct client_ctx *cc, union arg *arg)
}

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 cmd *cmd;
Expand Down
13 changes: 6 additions & 7 deletions mousefunc.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,6 @@ mousefunc_menu_unhide(struct client_ctx *cc, union arg *arg)
old_cc = client_current();

TAILQ_INIT(&menuq);

TAILQ_FOREACH(cc, &Clientq, entry)
if (cc->flags & CLIENT_HIDDEN) {
wname = (cc->label) ? cc->label : cc->name;
Expand All @@ -235,8 +234,8 @@ mousefunc_menu_unhide(struct client_ctx *cc, union arg *arg)
if (TAILQ_EMPTY(&menuq))
return;

mi = menu_filter(sc, &menuq, NULL, NULL, 0, NULL, NULL);
if (mi != NULL) {
if ((mi = menu_filter(sc, &menuq, NULL, NULL, 0,
NULL, NULL)) != NULL) {
cc = (struct client_ctx *)mi->ctx;
client_unhide(cc);

Expand All @@ -252,19 +251,19 @@ void
mousefunc_menu_cmd(struct client_ctx *cc, union arg *arg)
{
struct screen_ctx *sc = cc->sc;
struct cmd *cmd;
struct menu *mi;
struct menu_q menuq;
struct cmd *cmd;

TAILQ_INIT(&menuq);

TAILQ_FOREACH(cmd, &Conf.cmdq, entry)
menuq_add(&menuq, cmd, "%s", cmd->name);

if (TAILQ_EMPTY(&menuq))
return;

mi = menu_filter(sc, &menuq, NULL, NULL, 0, NULL, NULL);
if (mi != NULL)
if ((mi = menu_filter(sc, &menuq, NULL, NULL, 0,
NULL, NULL)) != NULL)
u_spawn(((struct cmd *)mi->ctx)->path);

menuq_clear(&menuq);
Expand Down
Loading

0 comments on commit 1fd3fc4

Please sign in to comment.