Merge pull request #2 from siebenmann/mouse-chords - sam - An updated version of the sam text editor.
(HTM) git clone git://vernunftzentrum.de/sam.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 984f79a82438440d89427d683000a4056f6cbd07
(DIR) parent c0e7b09dcf26f2ce827dfcb1a646809618f74396
(HTM) Author: Rob King <deadpixi@users.noreply.github.com>
Date: Tue, 4 Aug 2015 21:51:22 -0500
Merge pull request #2 from siebenmann/mouse-chords
Add acme/wily like chorded mouse buttons
Diffstat:
libframe/frselect.c | 2 +-
samterm/flayer.c | 12 +++++++++---
samterm/main.c | 23 ++++++++++++++++++++++-
3 files changed, 32 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/libframe/frselect.c b/libframe/frselect.c
@@ -42,7 +42,7 @@ frselect(Frame *f, Mouse *m) /* when called, button 1 is down */
else
f->p0 = p1, f->p1 = p0;
frgetmouse();
- }while(m->buttons & 1);
+ }while((m->buttons & 7) == 1);
}
/* it is assumed p0<=p1 and both were generated by frptofchar() */
void
(DIR) diff --git a/samterm/flayer.c b/samterm/flayer.c
@@ -236,15 +236,21 @@ flselect(Flayer *l)
int ret = 0;
if(l->visible!=All)
flupfront(l);
+ if(mouse.msec-l->click<Clicktime)
+ ret = 1;
frselect(&l->f, &mouse);
if(l->f.p0==l->f.p1){
- if(mouse.msec-l->click<Clicktime && l->f.p0+l->origin==l->p0){
+ if(ret == 1 && l->f.p0+l->origin==l->p0){
ret = 1;
l->click = 0;
- }else
+ }else {
+ ret = 0;
l->click = mouse.msec;
- }else
+ }
+ }else {
+ ret = 0;
l->click = 0;
+ }
l->p0 = l->f.p0+l->origin, l->p1 = l->f.p1+l->origin;
return ret;
}
(DIR) diff --git a/samterm/main.c b/samterm/main.c
@@ -21,6 +21,7 @@ long typeesc = -1;
long modified = 0; /* strange lookahead for menus */
char lock = 1;
char hasunlocked = 0;
+int chord = 0;
char *machine = "localhost";
void
@@ -83,7 +84,11 @@ main(int argc, char *argv[])
scr = which && ptinrect(mouse.xy, which->scroll);
if(mouse.buttons)
flushtyping(1);
- if(mouse.buttons&1){
+ if (chord == 1 && !mouse.buttons)
+ chord = 0;
+ if (chord)
+ chord |= mouse.buttons;
+ else if(mouse.buttons&1){
if(nwhich){
if(nwhich!=which)
current(nwhich);
@@ -96,6 +101,8 @@ main(int argc, char *argv[])
t->lock++;
}else if(t!=&cmd)
outcmd();
+ if(mouse.buttons&1)
+ chord = mouse.buttons;
}
}
}else if((mouse.buttons&2) && which){
@@ -111,6 +118,20 @@ main(int argc, char *argv[])
}
mouseunblock();
}
+ if(chord) {
+ t = (Text *)which->user1;
+ if(!t->lock){
+ int w = which-t->l;
+ if(chord&2){
+ cut(t, w, 1, 1);
+ chord &= ~2;
+ }
+ if(chord&4){
+ paste(t, w);
+ chord &= ~4;
+ }
+ }
+ }
}
}