tMove X-specific selection info into XSelection - st - [fork] customized build … | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5683b1f80c5ac274adf98517ce2217b4d4896243 | |
parent 138caf294ea4d7968df36ead9d5ff5fc49f6215f | |
Author: Devin J. Pohly <[email protected]> | |
Date: Wed, 21 Feb 2018 22:56:02 -0600 | |
Move X-specific selection info into XSelection | |
Data about PRIMARY/CLIPBOARD and clicks are part of the front-end, not | |
tthe terminal. | |
Signed-off-by: Devin J. Pohly <[email protected]> | |
Diffstat: | |
M st.c | 4 ---- | |
M st.h | 5 ----- | |
M x.c | 31 +++++++++++++++++++----------… | |
3 files changed, 19 insertions(+), 21 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -365,13 +365,9 @@ base64dec(const char *src) | |
void | |
selinit(void) | |
{ | |
- clock_gettime(CLOCK_MONOTONIC, &sel.tclick1); | |
- clock_gettime(CLOCK_MONOTONIC, &sel.tclick2); | |
sel.mode = SEL_IDLE; | |
sel.snap = 0; | |
sel.ob.x = -1; | |
- sel.primary = NULL; | |
- sel.clipboard = NULL; | |
} | |
int | |
diff --git a/st.h b/st.h | |
t@@ -149,12 +149,7 @@ typedef struct { | |
int x, y; | |
} nb, ne, ob, oe; | |
- char *primary, *clipboard; | |
int alt; | |
- struct timespec tclick1; | |
- struct timespec tclick2; | |
- | |
- //Atom xtarget; | |
} Selection; | |
typedef union { | |
diff --git a/x.c b/x.c | |
t@@ -94,6 +94,9 @@ typedef struct { | |
typedef struct { | |
Atom xtarget; | |
+ char *primary, *clipboard; | |
+ struct timespec tclick1; | |
+ struct timespec tclick2; | |
} XSelection; | |
/* Font structure */ | |
t@@ -234,11 +237,11 @@ clipcopy(const Arg *dummy) | |
{ | |
Atom clipboard; | |
- if (sel.clipboard != NULL) | |
- free(sel.clipboard); | |
+ if (xsel.clipboard != NULL) | |
+ free(xsel.clipboard); | |
- if (sel.primary != NULL) { | |
- sel.clipboard = xstrdup(sel.primary); | |
+ if (xsel.primary != NULL) { | |
+ xsel.clipboard = xstrdup(xsel.primary); | |
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); | |
XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime); | |
} | |
t@@ -427,9 +430,9 @@ bpress(XEvent *e) | |
* If the user clicks below predefined timeouts specific | |
* snapping behaviour is exposed. | |
*/ | |
- if (TIMEDIFF(now, sel.tclick2) <= tripleclicktimeout) { | |
+ if (TIMEDIFF(now, xsel.tclick2) <= tripleclicktimeout) { | |
sel.snap = SNAP_LINE; | |
- } else if (TIMEDIFF(now, sel.tclick1) <= doubleclicktimeout) { | |
+ } else if (TIMEDIFF(now, xsel.tclick1) <= doubleclicktimeout) { | |
sel.snap = SNAP_WORD; | |
} else { | |
sel.snap = 0; | |
t@@ -439,8 +442,8 @@ bpress(XEvent *e) | |
if (sel.snap != 0) | |
sel.mode = SEL_READY; | |
tsetdirt(sel.nb.y, sel.ne.y); | |
- sel.tclick2 = sel.tclick1; | |
- sel.tclick1 = now; | |
+ xsel.tclick2 = xsel.tclick1; | |
+ xsel.tclick1 = now; | |
} | |
} | |
t@@ -594,9 +597,9 @@ selrequest(XEvent *e) | |
*/ | |
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); | |
if (xsre->selection == XA_PRIMARY) { | |
- seltext = sel.primary; | |
+ seltext = xsel.primary; | |
} else if (xsre->selection == clipboard) { | |
- seltext = sel.clipboard; | |
+ seltext = xsel.clipboard; | |
} else { | |
fprintf(stderr, | |
"Unhandled clipboard selection 0x%lx\n", | |
t@@ -620,8 +623,8 @@ selrequest(XEvent *e) | |
void | |
setsel(char *str, Time t) | |
{ | |
- free(sel.primary); | |
- sel.primary = str; | |
+ free(xsel.primary); | |
+ xsel.primary = str; | |
XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t); | |
if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win) | |
t@@ -1127,6 +1130,10 @@ xinit(void) | |
xhints(); | |
XSync(xw.dpy, False); | |
+ clock_gettime(CLOCK_MONOTONIC, &xsel.tclick1); | |
+ clock_gettime(CLOCK_MONOTONIC, &xsel.tclick2); | |
+ xsel.primary = NULL; | |
+ xsel.clipboard = NULL; | |
xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0); | |
if (xsel.xtarget == None) | |
xsel.xtarget = XA_STRING; |