~petersanchez/st

ba7f4d69af62d20e13fea78a408095e017410651 — Avi Halachmi (:avih) 4 years ago 2b8333f
mouse shortcuts: allow same functions as kb shortcuts

Previously mouse shortcuts supported only ttywrite.

This required adding an "Arg" function ttysend - which does what the
original mouse shortcuts did.
3 files changed, 18 insertions(+), 9 deletions(-)

M config.def.h
M st.h
M x.c
M config.def.h => config.def.h +3 -3
@@ 155,9 155,9 @@ static unsigned int defaultattr = 11;
 * Beware that overloading Button1 will disable the selection.
 */
static MouseShortcut mshortcuts[] = {
	/* button               mask            string */
	{ Button4,              XK_ANY_MOD,     "\031" },
	{ Button5,              XK_ANY_MOD,     "\005" },
	/* mask                 button   function        argument */
	{ XK_ANY_MOD,           Button4, ttysend,        {.s = "\031"} },
	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} },
};

/* Internal keyboard shortcuts. */

M st.h => st.h +1 -0
@@ 74,6 74,7 @@ typedef union {
	uint ui;
	float f;
	const void *v;
	const char *s;
} Arg;

void die(const char *, ...);

M x.c => x.c +14 -6
@@ 29,9 29,10 @@ typedef struct {
} Shortcut;

typedef struct {
	uint b;
	uint mask;
	char *s;
	uint mod;
	uint button;
	void (*func)(const Arg *);
	const Arg arg;
} MouseShortcut;

typedef struct {


@@ 56,6 57,7 @@ static void selpaste(const Arg *);
static void zoom(const Arg *);
static void zoomabs(const Arg *);
static void zoomreset(const Arg *);
static void ttysend(const Arg *);

/* config.h for applying patches and the configuration. */
#include "config.h"


@@ 312,6 314,12 @@ zoomreset(const Arg *arg)
	}
}

void
ttysend(const Arg *arg)
{
	ttywrite(arg->s, strlen(arg->s), 1);
}

int
evcol(XEvent *e)
{


@@ 421,9 429,9 @@ bpress(XEvent *e)
	}

	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
		if (e->xbutton.button == ms->b
				&& match(ms->mask, e->xbutton.state)) {
			ttywrite(ms->s, strlen(ms->s), 1);
		if (e->xbutton.button == ms->button
				&& match(ms->mod, e->xbutton.state)) {
			ms->func(&(ms->arg));
			return;
		}
	}