I rebased Andrew Hills "capscolor" patch for slock onto the current HEAD
at 9dfe0ce, this patch adds it to the wiki.
commit ba95deb099021e893ed8b5f27d20dff4e5737454
Author: Klemens Nanni <k...@posteo.org>
Date:   Sat Jan 30 22:39:25 2016 +0100

    [slock] 20160130-capscolor.diff

diff --git a/tools.suckless.org/slock/patches/capscolor.md b/tools.suckless.org/slock/patches/capscolor.md
index cd0fe80..189b174 100644
--- a/tools.suckless.org/slock/patches/capscolor.md
+++ b/tools.suckless.org/slock/patches/capscolor.md
@@ -8,12 +8,16 @@ Introduces an additional color to indicate the state of Caps Lock. Not
 compatible with the [failcolor](./failcolor) patch. Written against HEAD at
 a31b919, but should apply to 1.2.
 
+Version 20160130 is written against current HEAD at 9dfe0ce.
+
 Download
 --------
 
 * [slock-capscolor.diff](slock-capscolor.diff)
+* [slock-20160130-capscolor.diff](slock-20160130-capscolor.diff)
 
-Author
-------
+Authors
+-------
 
 * Andrew Hills <[ahi...@ednos.net](mailto:ahi...@ednos.net)>
+* Klemens Nanni <[k...@posteo.org](mailto:ahi...@ednos.net)> (20160130 version)
diff --git a/tools.suckless.org/slock/patches/slock-20160130-capscolor.diff b/tools.suckless.org/slock/patches/slock-20160130-capscolor.diff
new file mode 100644
index 0000000..06320b3
--- /dev/null
+++ b/tools.suckless.org/slock/patches/slock-20160130-capscolor.diff
@@ -0,0 +1,72 @@
+diff --git a/config.def.h b/config.def.h
+index fca0ae0..6673e54 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -2,5 +2,6 @@ static const char *colorname[NUMCOLS] = {
+ 	"black",     /* after initialization */
+ 	"#005577",   /* during input */
+ 	"#CC3333",   /* failed/cleared the input */
++	"red",       /* CapsLock on */
+ };
+ static const Bool failonclear = True;
+diff --git a/slock.c b/slock.c
+index df2d3c6..8c1a791 100644
+--- a/slock.c
++++ b/slock.c
+@@ -17,6 +17,7 @@
+ #include <X11/keysym.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
++#include <X11/XKBlib.h>
+ 
+ #if HAVE_BSD_AUTH
+ #include <login_cap.h>
+@@ -27,6 +28,7 @@ enum {
+ 	INIT,
+ 	INPUT,
+ 	FAILED,
++	CAPS,
+ 	NUMCOLS
+ };
+ 
+@@ -127,15 +129,19 @@ readpw(Display *dpy, const char *pws)
+ #endif
+ {
+ 	char buf[32], passwd[256];
+-	int num, screen;
+-	unsigned int len, color;
++	int num, screen, caps;
++	unsigned int len, color, indicators;
+ 	KeySym ksym;
+ 	XEvent ev;
+ 	static int oldc = INIT;
+ 
+ 	len = 0;
++	caps = 0;
+ 	running = True;
+ 
++	if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
++		caps = indicators & 1;
++
+ 	/* As "slock" stands for "Simple X display locker", the DPMS settings
+ 	 * had been removed and you can set it with "xset" or some other
+ 	 * utility. This way the user can easily set a customized DPMS
+@@ -177,6 +183,9 @@ readpw(Display *dpy, const char *pws)
+ 				if (len)
+ 					--len;
+ 				break;
++			case XK_Caps_Lock:
++				caps = !caps;
++				break;
+ 			default:
+ 				if (num && !iscntrl((int)buf[0]) && (len + num < sizeof(passwd))) {
+ 					memcpy(passwd + len, buf, num);
+@@ -184,7 +193,7 @@ readpw(Display *dpy, const char *pws)
+ 				}
+ 				break;
+ 			}
+-			color = len ? INPUT : (failure || failonclear ? FAILED : INIT);
++			color = len ? (caps ? CAPS : INPUT) : (failure || failonclear ? FAILED : INIT);
+ 			if (running && oldc != color) {
+ 				for (screen = 0; screen < nscreens; screen++) {
+ 					XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[color]);

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to