Add a possibility to modify the string sent by mouse buttons.

Thanks Alexander Rezinsky <alexrez@gmail.com> for the suggestion!
This commit is contained in:
Christoph Lohmann 2013-04-28 17:42:30 +02:00
parent a77b01176a
commit a53017c8b4
2 changed files with 30 additions and 6 deletions

View file

@ -74,7 +74,15 @@ static unsigned int defaultcs = 256;
static unsigned int defaultitalic = 11; static unsigned int defaultitalic = 11;
static unsigned int defaultunderline = 7; static unsigned int defaultunderline = 7;
/* Internal shortcuts. */ /* Internal mouse shortcuts. */
/* Beware that overloading Button1 will disable the selection. */
static Mousekey mshortcuts[] = {
/* keysym mask string */
{ Button4, XK_ANY_MOD, "\031"},
{ Button5, XK_ANY_MOD, "\005"},
};
/* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask #define MODKEY Mod1Mask
static Shortcut shortcuts[] = { static Shortcut shortcuts[] = {

26
st.c
View file

@ -228,6 +228,12 @@ typedef struct {
char state; /* focus, redraw, visible */ char state; /* focus, redraw, visible */
} XWindow; } XWindow;
typedef struct {
int b;
uint mask;
char s[ESC_BUF_SIZ];
} Mousekey;
typedef struct { typedef struct {
KeySym k; KeySym k;
uint mask; uint mask;
@ -771,10 +777,24 @@ mousereport(XEvent *e) {
void void
bpress(XEvent *e) { bpress(XEvent *e) {
struct timeval now; struct timeval now;
Mousekey *mk;
if(IS_SET(MODE_MOUSE)) { if(IS_SET(MODE_MOUSE)) {
mousereport(e); mousereport(e);
} else if(e->xbutton.button == Button1) { return;
}
for(mk = mshortcuts; mk < mshortcuts + LEN(mshortcuts); mk++) {
if(e->xbutton.button == mk->b
&& match(mk->mask, e->xbutton.state)) {
ttywrite(mk->s, strlen(mk->s));
if(IS_SET(MODE_ECHO))
techo(mk->s, strlen(mk->s));
return;
}
}
if(e->xbutton.button == Button1) {
gettimeofday(&now, NULL); gettimeofday(&now, NULL);
/* Clear previous selection, logically and visually. */ /* Clear previous selection, logically and visually. */
@ -817,10 +837,6 @@ bpress(XEvent *e) {
} }
sel.tclick2 = sel.tclick1; sel.tclick2 = sel.tclick1;
sel.tclick1 = now; sel.tclick1 = now;
} else if(e->xbutton.button == Button4) {
ttywrite("\031", 1);
} else if(e->xbutton.button == Button5) {
ttywrite("\005", 1);
} }
} }