Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
The definition of the reverse cursor is now up to the user.
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
0c528d5
..
782d18e
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-1811,7
+1811,6
@@
tmoveto(int x, int y)
{
int miny, maxy;
{
int miny, maxy;
- selclear(NULL);
if (term.c.state & CURSOR_ORIGIN) {
miny = term.top;
maxy = term.bot;
if (term.c.state & CURSOR_ORIGIN) {
miny = term.top;
maxy = term.bot;
@@
-3819,6
+3818,7
@@
xdrawglyph(Glyph g, int x, int y)
{
int numspecs;
XftGlyphFontSpec spec;
{
int numspecs;
XftGlyphFontSpec spec;
+
numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y);
xdrawglyphfontspecs(&spec, g, numspecs, x, y);
}
numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y);
xdrawglyphfontspecs(&spec, g, numspecs, x, y);
}
@@
-3828,8
+3828,9
@@
xdrawcursor(void)
{
static int oldx = 0, oldy = 0;
int curx;
{
static int oldx = 0, oldy = 0;
int curx;
- Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs};
+ Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}
, og
;
int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN);
int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN);
+ Color drawcol;
LIMIT(oldx, 0, term.col-1);
LIMIT(oldy, 0, term.row-1);
LIMIT(oldx, 0, term.col-1);
LIMIT(oldy, 0, term.row-1);
@@
-3842,12
+3843,19
@@
xdrawcursor(void)
if (term.line[term.c.y][curx].mode & ATTR_WDUMMY)
curx--;
if (term.line[term.c.y][curx].mode & ATTR_WDUMMY)
curx--;
+ /* remove the old cursor */
+ og = term.line[oldy][oldx];
+ if (ena_sel && selected(oldx, oldy))
+ og.mode ^= ATTR_REVERSE;
+ xdrawglyph(og, oldx, oldy);
+
g.u = term.line[term.c.y][term.c.x].u;
g.u = term.line[term.c.y][term.c.x].u;
- if (ena_sel && selected(term.c.x, term.c.y))
+ if (ena_sel && selected(term.c.x, term.c.y)) {
+ drawcol = dc.col[defaultrcs];
g.mode ^= ATTR_REVERSE;
g.mode ^= ATTR_REVERSE;
-
- /* remove the old cursor */
- xdrawglyph(term.line[oldy][oldx], oldx, oldy);
+ } else {
+ drawcol = dc.col[defaultcs];
+ }
if (IS_SET(MODE_HIDE))
return;
if (IS_SET(MODE_HIDE))
return;
@@
-3869,33
+3877,34
@@
xdrawcursor(void)
break;
case 3: /* Blinking Underline */
case 4: /* Steady Underline */
break;
case 3: /* Blinking Underline */
case 4: /* Steady Underline */
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + curx * xw.cw,
borderpx + curx * xw.cw,
- borderpx + (term.c.y + 1) * xw.ch - cursorthickness,
+ borderpx + (term.c.y + 1) * xw.ch - \
+ cursorthickness,
xw.cw, cursorthickness);
break;
case 5: /* Blinking bar */
case 6: /* Steady bar */
xw.cw, cursorthickness);
break;
case 5: /* Blinking bar */
case 6: /* Steady bar */
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
cursorthickness, xw.ch);
break;
}
} else {
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
cursorthickness, xw.ch);
break;
}
} else {
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
xw.cw - 1, 1);
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
xw.cw - 1, 1);
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
1, xw.ch - 1);
borderpx + curx * xw.cw,
borderpx + term.c.y * xw.ch,
1, xw.ch - 1);
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + (curx + 1) * xw.cw - 1,
borderpx + term.c.y * xw.ch,
1, xw.ch - 1);
borderpx + (curx + 1) * xw.cw - 1,
borderpx + term.c.y * xw.ch,
1, xw.ch - 1);
- XftDrawRect(xw.draw, &d
c.col[defaultcs]
,
+ XftDrawRect(xw.draw, &d
rawcol
,
borderpx + curx * xw.cw,
borderpx + (term.c.y + 1) * xw.ch - 1,
xw.cw, 1);
borderpx + curx * xw.cw,
borderpx + (term.c.y + 1) * xw.ch - 1,
xw.cw, 1);
@@
-3945,7
+3954,7
@@
drawregion(int x1, int y1, int x2, int y2)
{
int i, x, y, ox, numspecs;
Glyph base, new;
{
int i, x, y, ox, numspecs;
Glyph base, new;
- XftGlyphFontSpec
*
specs;
+ XftGlyphFontSpec
*
specs;
int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN);
if (!(xw.state & WIN_VISIBLE))
int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN);
if (!(xw.state & WIN_VISIBLE))