sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 81f073846ec2c97061b6cc8c1324535c3bda6d94
parent 8e4ccb62821546ba6db8f679d65a1131f666677c
Author: Blair Drummond <blair.robert.drummond@gmail.com>
Date:   Tue, 26 Jun 2018 15:37:06 -0400

Slock patch - Leave a message on lock screen.

Diffstat:
tools.suckless.org/slock/patches/message.md | 38++++++++++++++++++++++++++++++++++++++
tools.suckless.org/slock/patches/slock-message-20180626-8384a86.diff | 171+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 209 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/slock/patches/message.md b/tools.suckless.org/slock/patches/message.md @@ -0,0 +1,38 @@ +Message +======= + +Description +----------- + +This patch lets you add a message to your lock screen. You can place a default message in `config.h`, and you can also pass a message with `-m message` + +So, for instance, you can run + +`slock -m "Locked at $(date "+%a %d, %H:%M:%S")"` + +Or if you want a silly lockscreen + +`slock -m "$(cowsay "$(fortune)")"` + +Notes +----- + +This adds three items to `config.h`: + + * `message` - the default message + * `text_color` - which can be a hex color or a colorname (like "black") + * `text-size` - which must be some valid X11 dimension like "6x10" + + +*A list of font sizes might be in* `/usr/share/fonts/X11/misc/` + + +Download +-------- + + * [slock-message-20180626-8384a86.diff](slock-message-20180626-8384a86.diff) + +Authors +------- + + * Blair Drummond - blair.robert.drummond@gmail.com diff --git a/tools.suckless.org/slock/patches/slock-message-20180626-8384a86.diff b/tools.suckless.org/slock/patches/slock-message-20180626-8384a86.diff @@ -0,0 +1,171 @@ +From 8384a863057f024868bd8455a82013f716197ab0 Mon Sep 17 00:00:00 2001 +From: Blair Drummond <blair.robert.drummond@gmail.com> +Date: Tue, 26 Jun 2018 15:09:13 -0400 +Subject: [PATCH] Adds [-m message] option to leave a message on the lockscreen + +--- + config.def.h | 9 ++++++ + slock.1 | 4 +++ + slock.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 87 insertions(+), 3 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 9855e21..7eb7a0d 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -10,3 +10,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 * text_size = "6x10"; +diff --git a/slock.1 b/slock.1 +index 82cdcd6..541a264 100644 +--- a/slock.1 ++++ b/slock.1 +@@ -6,6 +6,7 @@ + .Sh SYNOPSIS + .Nm + .Op Fl v ++.Op Fl m Ar message + .Op Ar cmd Op Ar arg ... + .Sh DESCRIPTION + .Nm +@@ -16,6 +17,9 @@ is executed after the screen has been locked. + .Bl -tag -width Ds + .It Fl v + Print version information to stdout 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 5ae738c..6a9a03f 100644 +--- a/slock.c ++++ b/slock.c +@@ -61,6 +61,71 @@ die(const char *errstr, ...) + #include <fcntl.h> + #include <linux/oom.h> + ++static void ++writemessage(Display *dpy, Window win, int screen) ++{ ++ int len, line_len, width, height, i, j, k, tab_replace, tab_size; ++ XGCValues gr_values; ++ XFontStruct *fontinfo; ++ XColor color, dummy; ++ GC gc; ++ fontinfo = XLoadQueryFont(dpy, text_size); ++ 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); ++ ++ ++ /* ++ * 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; ++ ++ height = DisplayHeight(dpy, screen)*3/7 - (k*20)/3; ++ width = (DisplayWidth(dpy, screen) - 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++; ++ } ++ } ++ } ++} ++ ++ + static void + dontkillme(void) + { +@@ -194,6 +259,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; + } +@@ -300,7 +366,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + static void + usage(void) + { +- die("usage: slock [-v] [cmd [arg ...]]\n"); ++ die("usage: slock [-v] [-m message] [cmd [arg ...]]\n"); + } + + int +@@ -319,6 +385,9 @@ main(int argc, char **argv) { + case 'v': + fprintf(stderr, "slock-"VERSION"\n"); + return 0; ++ case 'm': ++ message = EARGF(usage()); ++ break; + default: + usage(); + } ARGEND +@@ -363,10 +432,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.17.1 +