tMove remaining selection mode logic into selextend - st - [fork] customized bu… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit cfc7acdfd923924ae150a32061fb95987697b159 | |
parent bcb5d3adbe57ead05a829e5144c2ba1dc465865f | |
Author: Devin J. Pohly <[email protected]> | |
Date: Wed, 21 Feb 2018 23:54:29 -0600 | |
Move remaining selection mode logic into selextend | |
The "done" parameter indicates a change which finalizes the selection | |
(e.g. a mouse button release as opposed to motion). | |
Signed-off-by: Devin J. Pohly <[email protected]> | |
Diffstat: | |
M st.c | 14 ++++++++++++-- | |
M st.h | 3 +-- | |
M x.c | 27 +++++++++------------------ | |
3 files changed, 22 insertions(+), 22 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -167,11 +167,11 @@ static ssize_t xwrite(int, const char *, size_t); | |
/* Globals */ | |
Term term; | |
-Selection sel; | |
int cmdfd; | |
pid_t pid; | |
int oldbutton = 3; /* button event on startup: 3 = release */ | |
+static Selection sel; | |
static CSIEscape csiescseq; | |
static STREscape strescseq; | |
static int iofd = 1; | |
t@@ -402,9 +402,17 @@ selstart(int col, int row, int snap) | |
} | |
void | |
-selextend(int col, int row, int type) | |
+selextend(int col, int row, int type, int done) | |
{ | |
int oldey, oldex, oldsby, oldsey, oldtype; | |
+ | |
+ if (!sel.mode) | |
+ return; | |
+ if (done && sel.mode == SEL_EMPTY) { | |
+ selclear(); | |
+ return; | |
+ } | |
+ | |
oldey = sel.oe.y; | |
oldex = sel.oe.x; | |
oldsby = sel.nb.y; | |
t@@ -419,6 +427,8 @@ selextend(int col, int row, int type) | |
if (oldey != sel.oe.y || oldex != sel.oe.x || oldtype != sel.type) | |
tsetdirt(MIN(sel.nb.y, oldsby), MAX(sel.ne.y, oldsey)); | |
+ | |
+ sel.mode = done ? SEL_IDLE : SEL_READY; | |
} | |
void | |
diff --git a/st.h b/st.h | |
t@@ -184,7 +184,7 @@ void resettitle(void); | |
void selclear(void); | |
void selinit(void); | |
void selstart(int, int, int); | |
-void selextend(int, int, int); | |
+void selextend(int, int, int, int); | |
void selnormalize(void); | |
int selected(int, int); | |
char *getsel(void); | |
t@@ -198,7 +198,6 @@ char *xstrdup(char *); | |
/* Globals */ | |
extern Term term; | |
-extern Selection sel; | |
extern int cmdfd; | |
extern pid_t pid; | |
extern int oldbutton; | |
diff --git a/x.c b/x.c | |
t@@ -157,7 +157,7 @@ static void selnotify(XEvent *); | |
static void selclear_(XEvent *); | |
static void selrequest(XEvent *); | |
static void setsel(char *, Time); | |
-static void mousesel(XEvent *); | |
+static void mousesel(XEvent *, int); | |
static void mousereport(XEvent *); | |
static char *kmap(KeySym, uint); | |
static int match(uint, uint); | |
t@@ -313,7 +313,7 @@ y2row(int y) | |
} | |
void | |
-mousesel(XEvent *e) | |
+mousesel(XEvent *e, int done) | |
{ | |
int type, seltype = SEL_REGULAR; | |
uint state = e->xbutton.state & ~(Button1Mask | forceselmod); | |
t@@ -324,8 +324,9 @@ mousesel(XEvent *e) | |
break; | |
} | |
} | |
- | |
- selextend(x2col(e->xbutton.x), y2row(e->xbutton.y), seltype); | |
+ selextend(x2col(e->xbutton.x), y2row(e->xbutton.y), seltype, done); | |
+ if (done) | |
+ setsel(getsel(), e->xbutton.time); | |
} | |
void | |
t@@ -630,16 +631,10 @@ brelease(XEvent *e) | |
return; | |
} | |
- if (e->xbutton.button == Button2) { | |
+ if (e->xbutton.button == Button2) | |
selpaste(NULL); | |
- } else if (e->xbutton.button == Button1) { | |
- if (sel.mode == SEL_READY) { | |
- mousesel(e); | |
- setsel(getsel(), e->xbutton.time); | |
- } else | |
- selclear_(NULL); | |
- sel.mode = SEL_IDLE; | |
- } | |
+ else if (e->xbutton.button == Button1) | |
+ mousesel(e, 1); | |
} | |
void | |
t@@ -650,11 +645,7 @@ bmotion(XEvent *e) | |
return; | |
} | |
- if (!sel.mode) | |
- return; | |
- | |
- sel.mode = SEL_READY; | |
- mousesel(e); | |
+ mousesel(e, 0); | |
} | |
void |