Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Check alternative screen before drawing box selection
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
586d124
..
b143582
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-221,6
+221,7
@@
typedef struct {
struct {int x, y;} b, e;
char *clip;
Atom xtarget;
struct {int x, y;} b, e;
char *clip;
Atom xtarget;
+ bool alt;
struct timeval tclick1;
struct timeval tclick2;
} Selection;
struct timeval tclick1;
struct timeval tclick2;
} Selection;
@@
-579,6
+580,7
@@
selcopy(void) {
}
*ptr = 0;
}
}
*ptr = 0;
}
+ sel.alt = IS_SET(MODE_ALTSCREEN);
xsetsel(str);
}
xsetsel(str);
}
@@
-2076,7
+2078,10
@@
drawregion(int x1, int y1, int x2, int y2) {
int ic, ib, x, y, ox, sl;
Glyph base, new;
char buf[DRAW_BUF_SIZ];
int ic, ib, x, y, ox, sl;
Glyph base, new;
char buf[DRAW_BUF_SIZ];
+ bool ena_sel = sel.bx != -1, alt = IS_SET(MODE_ALTSCREEN);
+ if((sel.alt && !alt) || (!sel.alt && alt))
+ ena_sel = 0;
if(!(xw.state & WIN_VISIBLE))
return;
if(!(xw.state & WIN_VISIBLE))
return;
@@
-2089,7
+2094,7
@@
drawregion(int x1, int y1, int x2, int y2) {
ic = ib = ox = 0;
for(x = x1; x < x2; x++) {
new = term.line[y][x];
ic = ib = ox = 0;
for(x = x1; x < x2; x++) {
new = term.line[y][x];
- if(
sel.bx != -1
&& *(new.c) && selected(x, y))
+ if(
ena_sel
&& *(new.c) && selected(x, y))
new.mode ^= ATTR_REVERSE;
if(ib > 0 && (!(new.state & GLYPH_SET) || ATTRCMP(base, new) ||
ib >= DRAW_BUF_SIZ-UTF_SIZ)) {
new.mode ^= ATTR_REVERSE;
if(ib > 0 && (!(new.state & GLYPH_SET) || ATTRCMP(base, new) ||
ib >= DRAW_BUF_SIZ-UTF_SIZ)) {