st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 1e7816c2023f48728e15cc4128ad8be163986902
parent 5dc48af29e9972527767977be3bbc9c072cf1c13
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat, 13 Apr 2013 09:44:00 +0200

Drawing a more visible rectangle as cursor on unfocus.

To have a more visible cursor on unfocused windows this patch makes st draw a
rectangle around the terminal cell.

Thanks Mark Hills <mark@xwax.org> for the suggestion!

Diffstat:
Mconfig.def.h | 4+---
Mst.c | 33++++++++++++++++++++++++++-------
2 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -52,18 +52,16 @@ static const char *colorname[] = {
 
     /* more colors can be added after 255 to use with DefaultXX */
     "#cccccc",
-    "#333333",
 };
 
 
 /*
  * Default colors (colorname index)
- * foreground, background, cursor, unfocused cursor
+ * foreground, background, cursor
  */
 static unsigned int defaultfg = 7;
 static unsigned int defaultbg = 0;
 static unsigned int defaultcs = 256;
-static unsigned int defaultucs = 257;
 
 /*
  * Colors used, when the specific fg == defaultfg. So in reverse mode this
diff --git a/st.c b/st.c
@@ -2968,14 +2968,33 @@ xdrawcursor(void) {
 
     /* draw the new one */
     if(!(IS_SET(MODE_HIDE))) {
-        if(!(xw.state & WIN_FOCUSED))
-            g.bg = defaultucs;
-
-        if(IS_SET(MODE_REVERSE))
-            g.mode |= ATTR_REVERSE, g.fg = defaultcs, g.bg = defaultfg;
+        if(xw.state & WIN_FOCUSED) {
+            if(IS_SET(MODE_REVERSE)) {
+                g.mode |= ATTR_REVERSE;
+                g.fg = defaultcs;
+                g.bg = defaultfg;
+            }
 
-        sl = utf8size(g.c);
-        xdraws(g.c, g, term.c.x, term.c.y, 1, sl);
+            sl = utf8size(g.c);
+            xdraws(g.c, g, term.c.x, term.c.y, 1, sl);
+        } else {
+            XftDrawRect(xw.draw, &dc.col[defaultcs],
+                    borderpx + term.c.x * xw.cw,
+                    borderpx + term.c.y * xw.ch,
+                    xw.cw - 1, 1);
+            XftDrawRect(xw.draw, &dc.col[defaultcs],
+                    borderpx + term.c.x * xw.cw,
+                    borderpx + term.c.y * xw.ch,
+                    1, xw.ch - 1);
+            XftDrawRect(xw.draw, &dc.col[defaultcs],
+                    borderpx + (term.c.x + 1) * xw.cw - 1,
+                    borderpx + term.c.y * xw.ch,
+                    1, xw.ch - 1);
+            XftDrawRect(xw.draw, &dc.col[defaultcs],
+                    borderpx + term.c.x * xw.cw,
+                    borderpx + (term.c.y + 1) * xw.ch - 1,
+                    xw.cw, 1);
+        }
         oldx = term.c.x, oldy = term.c.y;
     }
 }