void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

commit 92d1be8d968f8b6ac8fd8a4c660460e32d596913
parent f39ad81866a49bdba5ccf2a95fa97e72e4356b33
Author: Dash Eclipse <dash@ezup.dev>
Date:   Thu, 16 Jul 2020 10:27:31 +0000

New package: slock

Diffstat:
MREADME | 8++++++++
Asrcpkgs/slock/patches/0001-patch-capscolor.patch | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrcpkgs/slock/patches/0002-patch-message.patch | 252+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrcpkgs/slock/patches/0003-patch-dpms.patch | 80+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrcpkgs/slock/template | 25+++++++++++++++++++++++++
5 files changed, 454 insertions(+), 0 deletions(-)

diff --git a/README b/README @@ -27,3 +27,11 @@ lilo [syslinux] [PATCH] keytab-lilo: update to support kbd 2.0.3 format https://www.syslinux.org/archives/2015-December/024690.html https://repo.or.cz/syslinux.git/commit/138e850fab106b5235178848b3e0d33e25f4d3a2 + + +slock +----- + +https://tools.suckless.org/slock/patches/capscolor/ +https://tools.suckless.org/slock/patches/message/ +https://tools.suckless.org/slock/patches/dpms/ diff --git a/srcpkgs/slock/patches/0001-patch-capscolor.patch b/srcpkgs/slock/patches/0001-patch-capscolor.patch @@ -0,0 +1,89 @@ +https://tools.suckless.org/slock/patches/capscolor/ + +From f85739f8f7a10713716ca952872b3def9e6055cf Mon Sep 17 00:00:00 2001 +From: Dash Eclipse <dash@ezup.dev> +Date: Thu, 16 Jul 2020 10:14:59 +0000 +Subject: [PATCH 1/3] patch capscolor + +--- + 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 d2f0886..ffcb4a3 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.27.0 + diff --git a/srcpkgs/slock/patches/0002-patch-message.patch b/srcpkgs/slock/patches/0002-patch-message.patch @@ -0,0 +1,252 @@ +https://tools.suckless.org/slock/patches/message/ + +From e2362abfdd46d53b8aa3cf9d05214d258885c3de Mon Sep 17 00:00:00 2001 +From: Dash Eclipse <dash@ezup.dev> +Date: Thu, 16 Jul 2020 10:15:16 +0000 +Subject: [PATCH 2/3] patch message + +--- + config.def.h | 9 ++++ + config.mk | 2 +- + slock.1 | 7 +++ + slock.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 4 files changed, 133 insertions(+), 5 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 6288856..e6bdf97 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -11,3 +11,12 @@ static const char *colorname[NUMCOLS] = { + + /* treat a cleared input like a wrong password (color) */ + static const int failonclear = 1; ++ ++/* default message */ ++static const char * message = "Suckless: Software that sucks less."; ++ ++/* text color */ ++static const char * text_color = "#ffffff"; ++ ++/* text size (must be a valid size) */ ++static const char * font_name = "6x10"; +diff --git a/config.mk b/config.mk +index 74429ae..c4ccf66 100644 +--- a/config.mk ++++ b/config.mk +@@ -12,7 +12,7 @@ X11LIB = /usr/X11R6/lib + + # includes and libs + INCS = -I. -I/usr/include -I${X11INC} +-LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr ++LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lXinerama + + # flags + CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H +diff --git a/slock.1 b/slock.1 +index 82cdcd6..946165f 100644 +--- a/slock.1 ++++ b/slock.1 +@@ -6,6 +6,8 @@ + .Sh SYNOPSIS + .Nm + .Op Fl v ++.Op Fl f ++.Op Fl m Ar message + .Op Ar cmd Op Ar arg ... + .Sh DESCRIPTION + .Nm +@@ -16,6 +18,11 @@ is executed after the screen has been locked. + .Bl -tag -width Ds + .It Fl v + Print version information to stdout and exit. ++.It Fl f ++List all valid X fonts and exit. ++.It Fl m Ar message ++Overrides default slock lock message. ++.TP + .El + .Sh SECURITY CONSIDERATIONS + To make sure a locked screen can not be bypassed by switching VTs +diff --git a/slock.c b/slock.c +index ffcb4a3..f6a3ca8 100644 +--- a/slock.c ++++ b/slock.c +@@ -15,6 +15,7 @@ + #include <unistd.h> + #include <sys/types.h> + #include <X11/extensions/Xrandr.h> ++#include <X11/extensions/Xinerama.h> + #include <X11/keysym.h> + #include <X11/Xlib.h> + #include <X11/Xutil.h> +@@ -25,6 +26,9 @@ + + char *argv0; + ++/* global count to prevent repeated error messages */ ++int count_error = 0; ++ + enum { + INIT, + INPUT, +@@ -85,6 +89,98 @@ dontkillme(void) + } + #endif + ++static void ++writemessage(Display *dpy, Window win, int screen) ++{ ++ int len, line_len, width, height, s_width, s_height, i, j, k, tab_replace, tab_size; ++ XGCValues gr_values; ++ XFontStruct *fontinfo; ++ XColor color, dummy; ++ XineramaScreenInfo *xsi; ++ GC gc; ++ fontinfo = XLoadQueryFont(dpy, font_name); ++ ++ if (fontinfo == NULL) { ++ if (count_error == 0) { ++ fprintf(stderr, "slock: Unable to load font \"%s\"\n", font_name); ++ fprintf(stderr, "slock: Try listing fonts with 'slock -f'\n"); ++ count_error++; ++ } ++ return; ++ } ++ ++ tab_size = 8 * XTextWidth(fontinfo, " ", 1); ++ ++ XAllocNamedColor(dpy, DefaultColormap(dpy, screen), ++ text_color, &color, &dummy); ++ ++ gr_values.font = fontinfo->fid; ++ gr_values.foreground = color.pixel; ++ gc=XCreateGC(dpy,win,GCFont+GCForeground, &gr_values); ++ ++ /* To prevent "Uninitialized" warnings. */ ++ xsi = NULL; ++ ++ /* ++ * Start formatting and drawing text ++ */ ++ ++ len = strlen(message); ++ ++ /* Max max line length (cut at '\n') */ ++ line_len = 0; ++ k = 0; ++ for (i = j = 0; i < len; i++) { ++ if (message[i] == '\n') { ++ if (i - j > line_len) ++ line_len = i - j; ++ k++; ++ i++; ++ j = i; ++ } ++ } ++ /* If there is only one line */ ++ if (line_len == 0) ++ line_len = len; ++ ++ if (XineramaIsActive(dpy)) { ++ xsi = XineramaQueryScreens(dpy, &i); ++ s_width = xsi[0].width; ++ s_height = xsi[0].height; ++ } else { ++ s_width = DisplayWidth(dpy, screen); ++ s_height = DisplayHeight(dpy, screen); ++ } ++ ++ height = s_height*3/7 - (k*20)/3; ++ width = (s_width - XTextWidth(fontinfo, message, line_len))/2; ++ ++ /* Look for '\n' and print the text between them. */ ++ for (i = j = k = 0; i <= len; i++) { ++ /* i == len is the special case for the last line */ ++ if (i == len || message[i] == '\n') { ++ tab_replace = 0; ++ while (message[j] == '\t' && j < i) { ++ tab_replace++; ++ j++; ++ } ++ ++ XDrawString(dpy, win, gc, width + tab_size*tab_replace, height + 20*k, message + j, i - j); ++ while (i < len && message[i] == '\n') { ++ i++; ++ j = i; ++ k++; ++ } ++ } ++ } ++ ++ /* xsi should not be NULL anyway if Xinerama is active, but to be safe */ ++ if (XineramaIsActive(dpy) && xsi != NULL) ++ XFree(xsi); ++} ++ ++ ++ + static const char * + gethash(void) + { +@@ -203,6 +299,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, + locks[screen]->win, + locks[screen]->colors[color]); + XClearWindow(dpy, locks[screen]->win); ++ writemessage(dpy, locks[screen]->win, screen); + } + oldc = color; + } +@@ -301,7 +398,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + static void + usage(void) + { +- die("usage: slock [-v] [cmd [arg ...]]\n"); ++ die("usage: slock [-v] [-f] [-m message] [cmd [arg ...]]\n"); + } + + int +@@ -314,12 +411,25 @@ main(int argc, char **argv) { + gid_t dgid; + const char *hash; + Display *dpy; +- int s, nlocks, nscreens; ++ int i, s, nlocks, nscreens; ++ int count_fonts; ++ char **font_names; + + ARGBEGIN { + case 'v': + fprintf(stderr, "slock-"VERSION"\n"); + return 0; ++ case 'm': ++ message = EARGF(usage()); ++ break; ++ case 'f': ++ if (!(dpy = XOpenDisplay(NULL))) ++ die("slock: cannot open display\n"); ++ font_names = XListFonts(dpy, "*", 10000 /* list 10000 fonts*/, &count_fonts); ++ for (i=0; i<count_fonts; i++) { ++ fprintf(stderr, "%s\n", *(font_names+i)); ++ } ++ return 0; + default: + usage(); + } ARGEND +@@ -364,10 +474,12 @@ main(int argc, char **argv) { + if (!(locks = calloc(nscreens, sizeof(struct lock *)))) + die("slock: out of memory\n"); + for (nlocks = 0, s = 0; s < nscreens; s++) { +- if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL) ++ if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL) { ++ writemessage(dpy, locks[s]->win, s); + nlocks++; +- else ++ } else { + break; ++ } + } + XSync(dpy, 0); + +-- +2.27.0 + diff --git a/srcpkgs/slock/patches/0003-patch-dpms.patch b/srcpkgs/slock/patches/0003-patch-dpms.patch @@ -0,0 +1,80 @@ +https://tools.suckless.org/slock/patches/dpms/ + +From 7c0aadbed47bff19657ed4b4555d1f554ef50293 Mon Sep 17 00:00:00 2001 +From: Dash Eclipse <dash@ezup.dev> +Date: Thu, 16 Jul 2020 10:16:08 +0000 +Subject: [PATCH 3/3] patch dpms + +--- + config.def.h | 3 +++ + slock.c | 20 ++++++++++++++++++++ + 2 files changed, 23 insertions(+) + +diff --git a/config.def.h b/config.def.h +index e6bdf97..90f5b1d 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -12,6 +12,9 @@ static const char *colorname[NUMCOLS] = { + /* treat a cleared input like a wrong password (color) */ + static const int failonclear = 1; + ++/* time in seconds before the monitor shuts down */ ++static const int monitortime = 5; ++ + /* default message */ + static const char * message = "Suckless: Software that sucks less."; + +diff --git a/slock.c b/slock.c +index f6a3ca8..5aa7d47 100644 +--- a/slock.c ++++ b/slock.c +@@ -15,6 +15,7 @@ + #include <unistd.h> + #include <sys/types.h> + #include <X11/extensions/Xrandr.h> ++#include <X11/extensions/dpms.h> + #include <X11/extensions/Xinerama.h> + #include <X11/keysym.h> + #include <X11/Xlib.h> +@@ -412,6 +413,7 @@ main(int argc, char **argv) { + const char *hash; + Display *dpy; + int i, s, nlocks, nscreens; ++ CARD16 standby, suspend, off; + int count_fonts; + char **font_names; + +@@ -487,6 +489,20 @@ main(int argc, char **argv) { + if (nlocks != nscreens) + return 1; + ++ /* DPMS magic to disable the monitor */ ++ if (!DPMSCapable(dpy)) ++ die("slock: DPMSCapable failed\n"); ++ if (!DPMSEnable(dpy)) ++ die("slock: DPMSEnable failed\n"); ++ if (!DPMSGetTimeouts(dpy, &standby, &suspend, &off)) ++ die("slock: DPMSGetTimeouts failed\n"); ++ if (!standby || !suspend || !off) ++ die("slock: at least one DPMS variable is zero\n"); ++ if (!DPMSSetTimeouts(dpy, monitortime, monitortime, monitortime)) ++ die("slock: DPMSSetTimeouts failed\n"); ++ ++ XSync(dpy, 0); ++ + /* run post-lock command */ + if (argc > 0) { + switch (fork()) { +@@ -504,5 +520,9 @@ main(int argc, char **argv) { + /* everything is now blank. Wait for the correct password */ + readpw(dpy, &rr, locks, nscreens, hash); + ++ /* reset DPMS values to inital ones */ ++ DPMSSetTimeouts(dpy, standby, suspend, off); ++ XSync(dpy, 0); ++ + return 0; + } +-- +2.27.0 + diff --git a/srcpkgs/slock/template b/srcpkgs/slock/template @@ -0,0 +1,25 @@ +# Template file for 'slock' +pkgname=slock +version=1.4 +revision=1 +patch_args="-Np1" +hostmakedepends="pkg-config" +makedepends="libXrandr-devel libXinerama-devel" +short_desc="Simple screen locker for X" +maintainer="Orphaned <orphan@voidlinux.org>" +license="MIT" +homepage="http://tools.suckless.org/slock" +distfiles="http://dl.suckless.org/tools/slock-${version}.tar.gz" +checksum=b53849dbc60109a987d7a49b8da197305c29307fd74c12dc18af0d3044392e6a + +do_build() { + sed -i 's/CPPFLAGS =/CPPFLAGS +=/g' config.mk + sed -i 's/CFLAGS =/CFLAGS +=/g' config.mk + sed -i 's/LDFLAGS =/LDFLAGS +=/g' config.mk + make CC=$CC INCS="-I." LIBS="-lX11 -lXext -lcrypt -lXrandr -lXinerama" ${makejobs} +} + +do_install() { + make PREFIX=/usr DESTDIR=$DESTDIR install + vlicense LICENSE +}