iFixing the cursor movement in selections. - st - Simple Terminal Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/st//log.gph gopher.r-36.net 70 1Files /scm/st//files.gph gopher.r-36.net 70 1Refs /scm/st//refs.gph gopher.r-36.net 70 1README /scm/st//file/README.gph gopher.r-36.net 70 1LICENSE /scm/st//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit 594a25983639847ed063a3d181893dba54825f5a /scm/st//commit/594a25983639847ed063a3d181893dba54825f5a.gph gopher.r-36.net 70 1parent 91c70213d1e595467b14ce6d28f333dbedd97cab /scm/st//commit/91c70213d1e595467b14ce6d28f333dbedd97cab.gph gopher.r-36.net 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net gopher.r-36.net 70 iDate: Mon, 5 Oct 2015 22:09:51 +0200 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iFixing the cursor movement in selections. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iBefore the fix the cursor wouldn't obey if it's in a selection. If it is Err gopher.r-36.net 70 iinside it will now change to the reverse. This patch also adds that the Err gopher.r-36.net 70 idefaultcs will be reversed for the manually drawn cursors. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i st.c | 44 ++++++++++++++++++++++--------- Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i1 file changed, 31 insertions(+), 13 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/st.c b/st.c /scm/st//file/st.c.gph gopher.r-36.net 70 i@@ -1811,7 +1811,6 @@ tmoveto(int x, int y) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i int miny, maxy; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- selclear(NULL); Err gopher.r-36.net 70 i if (term.c.state & CURSOR_ORIGIN) { Err gopher.r-36.net 70 i miny = term.top; Err gopher.r-36.net 70 i maxy = term.bot; Err gopher.r-36.net 70 i@@ -3819,6 +3818,7 @@ xdrawglyph(Glyph g, int x, int y) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i int numspecs; Err gopher.r-36.net 70 i XftGlyphFontSpec spec; Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y); Err gopher.r-36.net 70 i xdrawglyphfontspecs(&spec, g, numspecs, x, y); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i@@ -3828,8 +3828,10 @@ xdrawcursor(void) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i static int oldx = 0, oldy = 0; Err gopher.r-36.net 70 i int curx; Err gopher.r-36.net 70 i- Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}; Err gopher.r-36.net 70 i+ Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}, og; Err gopher.r-36.net 70 i int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN); Err gopher.r-36.net 70 i+ Color drawcol; Err gopher.r-36.net 70 i+ XRenderColor dccol; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i LIMIT(oldx, 0, term.col-1); Err gopher.r-36.net 70 i LIMIT(oldy, 0, term.row-1); Err gopher.r-36.net 70 i@@ -3842,12 +3844,28 @@ xdrawcursor(void) Err gopher.r-36.net 70 i if (term.line[term.c.y][curx].mode & ATTR_WDUMMY) Err gopher.r-36.net 70 i curx--; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ /* remove the old cursor */ Err gopher.r-36.net 70 i+ og = term.line[oldy][oldx]; Err gopher.r-36.net 70 i+ if (ena_sel && selected(oldx, oldy)) Err gopher.r-36.net 70 i+ og.mode ^= ATTR_REVERSE; Err gopher.r-36.net 70 i+ xdrawglyph(og, oldx, oldy); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i g.u = term.line[term.c.y][term.c.x].u; Err gopher.r-36.net 70 i- if (ena_sel && selected(term.c.x, term.c.y)) Err gopher.r-36.net 70 i- g.mode ^= ATTR_REVERSE; Err gopher.r-36.net 70 i+ if (ena_sel && selected(term.c.x, term.c.y)) { Err gopher.r-36.net 70 i+ /* Err gopher.r-36.net 70 i+ * Allocate the drawing color which is the reverse of Err gopher.r-36.net 70 i+ * defaultcs, if we are selected. Err gopher.r-36.net 70 i+ */ Err gopher.r-36.net 70 i+ dccol.red = ~dc.col[defaultcs].color.red; Err gopher.r-36.net 70 i+ dccol.green = ~dc.col[defaultcs].color.green; Err gopher.r-36.net 70 i+ dccol.blue = ~dc.col[defaultcs].color.blue; Err gopher.r-36.net 70 i+ dccol.alpha = ~dc.col[defaultcs].color.alpha; Err gopher.r-36.net 70 i+ XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &dccol, &drawcol); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- /* remove the old cursor */ Err gopher.r-36.net 70 i- xdrawglyph(term.line[oldy][oldx], oldx, oldy); Err gopher.r-36.net 70 i+ g.mode ^= ATTR_REVERSE; Err gopher.r-36.net 70 i+ } else { Err gopher.r-36.net 70 i+ drawcol = dc.col[defaultcs]; Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if (IS_SET(MODE_HIDE)) Err gopher.r-36.net 70 i return; Err gopher.r-36.net 70 i@@ -3869,33 +3887,33 @@ xdrawcursor(void) Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 i case 3: /* Blinking Underline */ Err gopher.r-36.net 70 i case 4: /* Steady Underline */ Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + curx * xw.cw, Err gopher.r-36.net 70 i borderpx + (term.c.y + 1) * xw.ch - cursorthickness, Err gopher.r-36.net 70 i xw.cw, cursorthickness); Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 i case 5: /* Blinking bar */ Err gopher.r-36.net 70 i case 6: /* Steady bar */ Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + curx * xw.cw, Err gopher.r-36.net 70 i borderpx + term.c.y * xw.ch, Err gopher.r-36.net 70 i cursorthickness, xw.ch); Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i } else { Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + curx * xw.cw, Err gopher.r-36.net 70 i borderpx + term.c.y * xw.ch, Err gopher.r-36.net 70 i xw.cw - 1, 1); Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + curx * xw.cw, Err gopher.r-36.net 70 i borderpx + term.c.y * xw.ch, Err gopher.r-36.net 70 i 1, xw.ch - 1); Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + (curx + 1) * xw.cw - 1, Err gopher.r-36.net 70 i borderpx + term.c.y * xw.ch, Err gopher.r-36.net 70 i 1, xw.ch - 1); Err gopher.r-36.net 70 i- XftDrawRect(xw.draw, &dc.col[defaultcs], Err gopher.r-36.net 70 i+ XftDrawRect(xw.draw, &drawcol, Err gopher.r-36.net 70 i borderpx + curx * xw.cw, Err gopher.r-36.net 70 i borderpx + (term.c.y + 1) * xw.ch - 1, Err gopher.r-36.net 70 i xw.cw, 1); Err gopher.r-36.net 70 i@@ -3945,7 +3963,7 @@ drawregion(int x1, int y1, int x2, int y2) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i int i, x, y, ox, numspecs; Err gopher.r-36.net 70 i Glyph base, new; Err gopher.r-36.net 70 i- XftGlyphFontSpec* specs; Err gopher.r-36.net 70 i+ XftGlyphFontSpec *specs; Err gopher.r-36.net 70 i int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if (!(xw.state & WIN_VISIBLE)) Err gopher.r-36.net 70 .