1
0
mirror of https://github.com/tiyn/slock.git synced 2025-04-19 16:17:46 +02:00

Compare commits

...

7 Commits

Author SHA1 Message Date
e738d89c47 added capscolor patch to readme 2023-10-26 02:58:19 +02:00
737545828a added capscolor patch to master 2023-10-26 02:57:38 +02:00
d396a4a4c1 added capscolor patch 2023-10-26 02:51:41 +02:00
b1c8a9dda1 added control-clear patch to readme 2023-10-26 02:41:21 +02:00
cc6c284600 added control-clear patch to master 2023-10-26 02:40:44 +02:00
6b5d4811eb added control-clear patch 2023-10-26 02:36:52 +02:00
a8518168e5 remove unneeded code of dwmlogo patch 2023-10-25 23:28:18 +02:00
5 changed files with 139 additions and 10 deletions

View File

@ -7,7 +7,9 @@ This is my patched version of slock. The base version is directly from suckless.
The list below shows the currently applied patches to the master branch. The list below shows the currently applied patches to the master branch.
- slock-background-image-20220318-1c5a538.diff (shows a background image in locked state) - slock-background-image-20220318-1c5a538.diff (shows a background image in locked state)
- slock-capscolor-20220921-35633d4.diff (displays a separate color if caps is set)
- slock-dwmlogo-20210324.diff (adds dwm logo on lock screen) - slock-dwmlogo-20210324.diff (adds dwm logo on lock screen)
- slock-git-20161012-control-clear.diff (doesnt turn logo red when pressing control keys)
## Installation ## Installation

View File

@ -3,10 +3,10 @@ static const char *user = "user";
static const char *group = "nobody"; static const char *group = "nobody";
static const char *colorname[NUMCOLS] = { static const char *colorname[NUMCOLS] = {
[INIT] = "#2d2d2d", /* after initialization */ [INIT] = "#000000", /* after initialization */
[BACKGROUND] = "black", /* after initialization */ [INPUT] = "#0000ff", /* during input */
[INPUT] = "#005577", /* during input */ [FAILED] = "#ff0000", /* wrong password */
[FAILED] = "#CC3333", /* wrong password */ [CAPS] = "#ffff00", /* CapsLock on */
}; };
/* treat a cleared input like a wrong password (color) */ /* treat a cleared input like a wrong password (color) */
@ -32,3 +32,6 @@ static XRectangle rectangles[9] = {
{ 11, 4, 1, 2 }, { 11, 4, 1, 2 },
}; };
/* allow control key to trigger fail on clear */
static const int controlkeyclear = 1;

View File

@ -0,0 +1,88 @@
From da1721b1b4bb0aa8f94537ddd2a3eada1df00a30 Mon Sep 17 00:00:00 2001
From: Max Schillinger <maxschillinger@web.de>
Date: Wed, 21 Sep 2022 19:56:58 +0200
Subject: [PATCH] Update capscolor patch to match the latest slock commit
(35633d4)
---
config.def.h | 1 +
slock.c | 15 ++++++++++++---
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/config.def.h b/config.def.h
index 9855e21..6288856 100644
--- a/config.def.h
+++ b/config.def.h
@@ -6,6 +6,7 @@ static const char *colorname[NUMCOLS] = {
[INIT] = "black", /* after initialization */
[INPUT] = "#005577", /* during input */
[FAILED] = "#CC3333", /* wrong password */
+ [CAPS] = "red", /* CapsLock on */
};
/* treat a cleared input like a wrong password (color) */
diff --git a/slock.c b/slock.c
index 5ae738c..5f4fb7a 100644
--- a/slock.c
+++ b/slock.c
@@ -18,6 +18,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/XKBlib.h>
#include "arg.h"
#include "util.h"
@@ -28,6 +29,7 @@ enum {
INIT,
INPUT,
FAILED,
+ CAPS,
NUMCOLS
};
@@ -130,16 +132,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
{
XRRScreenChangeNotifyEvent *rre;
char buf[32], passwd[256], *inputhash;
- int num, screen, running, failure, oldc;
- unsigned int len, color;
+ int caps, num, screen, running, failure, oldc;
+ unsigned int len, color, indicators;
KeySym ksym;
XEvent ev;
len = 0;
+ caps = 0;
running = 1;
failure = 0;
oldc = INIT;
+ if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
+ caps = indicators & 1;
+
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf));
@@ -179,6 +185,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (len)
passwd[--len] = '\0';
break;
+ case XK_Caps_Lock:
+ caps = !caps;
+ break;
default:
if (num && !iscntrl((int)buf[0]) &&
(len + num < sizeof(passwd))) {
@@ -187,7 +196,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
}
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,
--
2.37.3

View File

@ -0,0 +1,27 @@
diff --git a/config.def.h b/config.def.h
index 6fba2b6..933152b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = {
/* treat a cleared input like a wrong password */
static const int failonclear = 1;
+
+/* allow control key to trigger fail on clear */
+static const int controlkeyclear = 0;
diff --git a/slock.c b/slock.c
index 4d7f06f..15552ef 100644
--- a/slock.c
+++ b/slock.c
@@ -180,8 +180,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
passwd[len--] = '\0';
break;
default:
- if (num && !iscntrl((int)buf[0]) &&
- (len + num < sizeof(passwd))) {
+ if (controlkeyclear && iscntrl((int)buf[0]))
+ continue;
+ if (num && (len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num);
len += num;
}

21
slock.c
View File

@ -24,6 +24,7 @@
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include <Imlib2.h> #include <Imlib2.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
#include <X11/XKBlib.h>
#include "arg.h" #include "arg.h"
#include "util.h" #include "util.h"
@ -31,10 +32,10 @@
char *argv0; char *argv0;
enum { enum {
BACKGROUND,
INIT, INIT,
INPUT, INPUT,
FAILED, FAILED,
CAPS,
NUMCOLS NUMCOLS
}; };
@ -167,16 +168,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
{ {
XRRScreenChangeNotifyEvent *rre; XRRScreenChangeNotifyEvent *rre;
char buf[32], passwd[256], *inputhash; char buf[32], passwd[256], *inputhash;
int num, screen, running, failure, oldc; int caps, num, screen, running, failure, oldc;
unsigned int len, color; unsigned int len, color, indicators;
KeySym ksym; KeySym ksym;
XEvent ev; XEvent ev;
len = 0; len = 0;
caps = 0;
running = 1; running = 1;
failure = 0; failure = 0;
oldc = INIT; oldc = INIT;
if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
caps = indicators & 1;
while (running && !XNextEvent(dpy, &ev)) { while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) { if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf)); explicit_bzero(&buf, sizeof(buf));
@ -216,15 +221,19 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (len) if (len)
passwd[--len] = '\0'; passwd[--len] = '\0';
break; break;
case XK_Caps_Lock:
caps = !caps;
break;
default: default:
if (num && !iscntrl((int)buf[0]) && if (controlkeyclear && iscntrl((int)buf[0]))
(len + num < sizeof(passwd))) { continue;
if (num && (len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num); memcpy(passwd + len, buf, num);
len += num; len += num;
} }
break; break;
} }
color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); color = len ? (caps ? CAPS : INPUT) : (failure || failonclear ? FAILED : INIT);
if (running && oldc != color) { if (running && oldc != color) {
for (screen = 0; screen < nscreens; screen++) { for (screen = 0; screen < nscreens; screen++) {
if (locks[screen]->bgmap) if (locks[screen]->bgmap)