Introduction
Introduction Statistics Contact Development Disclaimer Help
slock-message-20180626-35633d4.diff - sites - public wiki contents of suckless.…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
slock-message-20180626-35633d4.diff (4364B)
---
1 From 8384a863057f024868bd8455a82013f716197ab0 Mon Sep 17 00:00:00 2001
2 From: Blair Drummond <[email protected]>
3 Date: Tue, 26 Jun 2018 15:09:13 -0400
4 Subject: [PATCH] Adds [-m message] option to leave a message on the lock…
5
6 ---
7 config.def.h | 9 ++++++
8 slock.1 | 4 +++
9 slock.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++--
10 3 files changed, 87 insertions(+), 3 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 9855e21..7eb7a0d 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -10,3 +10,12 @@ static const char *colorname[NUMCOLS] = {
17
18 /* treat a cleared input like a wrong password (color) */
19 static const int failonclear = 1;
20 +
21 +/* default message */
22 +static const char * message = "Suckless: Software that sucks less.";
23 +
24 +/* text color */
25 +static const char * text_color = "#ffffff";
26 +
27 +/* text size (must be a valid size) */
28 +static const char * text_size = "6x10";
29 diff --git a/slock.1 b/slock.1
30 index 82cdcd6..541a264 100644
31 --- a/slock.1
32 +++ b/slock.1
33 @@ -6,6 +6,7 @@
34 .Sh SYNOPSIS
35 .Nm
36 .Op Fl v
37 +.Op Fl m Ar message
38 .Op Ar cmd Op Ar arg ...
39 .Sh DESCRIPTION
40 .Nm
41 @@ -16,6 +17,9 @@ is executed after the screen has been locked.
42 .Bl -tag -width Ds
43 .It Fl v
44 Print version information to stdout and exit.
45 +.It Fl m Ar message
46 +Overrides default slock lock message.
47 +.TP
48 .El
49 .Sh SECURITY CONSIDERATIONS
50 To make sure a locked screen can not be bypassed by switching VTs
51 diff --git a/slock.c b/slock.c
52 index 5ae738c..6a9a03f 100644
53 --- a/slock.c
54 +++ b/slock.c
55 @@ -61,6 +61,71 @@ die(const char *errstr, ...)
56 #include <fcntl.h>
57 #include <linux/oom.h>
58
59 +static void
60 +writemessage(Display *dpy, Window win, int screen)
61 +{
62 + int len, line_len, width, height, i, j, k, tab_replace, tab_siz…
63 + XGCValues gr_values;
64 + XFontStruct *fontinfo;
65 + XColor color, dummy;
66 + GC gc;
67 + fontinfo = XLoadQueryFont(dpy, text_size);
68 + tab_size = 8 * XTextWidth(fontinfo, " ", 1);
69 +
70 + XAllocNamedColor(dpy, DefaultColormap(dpy, screen),
71 + text_color, &color, &dummy);
72 +
73 + gr_values.font = fontinfo->fid;
74 + gr_values.foreground = color.pixel;
75 + gc=XCreateGC(dpy,win,GCFont+GCForeground, &gr_values);
76 +
77 +
78 + /*
79 + * Start formatting and drawing text
80 + */
81 +
82 + len = strlen(message);
83 +
84 + /* Max max line length (cut at '\n') */
85 + line_len = 0;
86 + k = 0;
87 + for (i = j = 0; i < len; i++) {
88 + if (message[i] == '\n') {
89 + if (i - j > line_len)
90 + line_len = i - j;
91 + k++;
92 + i++;
93 + j = i;
94 + }
95 + }
96 + /* If there is only one line */
97 + if (line_len == 0)
98 + line_len = len;
99 +
100 + height = DisplayHeight(dpy, screen)*3/7 - (k*20)/3;
101 + width = (DisplayWidth(dpy, screen) - XTextWidth(fontinfo, mess…
102 +
103 + /* Look for '\n' and print the text between them. */
104 + for (i = j = k = 0; i <= len; i++) {
105 + /* i == len is the special case for the last line */
106 + if (i == len || message[i] == '\n') {
107 + tab_replace = 0;
108 + while (message[j] == '\t' && j < i) {
109 + tab_replace++;
110 + j++;
111 + }
112 +
113 + XDrawString(dpy, win, gc, width + tab_size*tab_…
114 + while (i < len && message[i] == '\n') {
115 + i++;
116 + j = i;
117 + k++;
118 + }
119 + }
120 + }
121 +}
122 +
123 +
124 static void
125 dontkillme(void)
126 {
127 @@ -194,6 +259,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock …
128 locks[scre…
129 locks[scre…
130 XClearWindow(dpy, locks[screen]…
131 + writemessage(dpy, locks[screen]…
132 }
133 oldc = color;
134 }
135 @@ -300,7 +366,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int scre…
136 static void
137 usage(void)
138 {
139 - die("usage: slock [-v] [cmd [arg ...]]\n");
140 + die("usage: slock [-v] [-m message] [cmd [arg ...]]\n");
141 }
142
143 int
144 @@ -319,6 +385,9 @@ main(int argc, char **argv) {
145 case 'v':
146 fprintf(stderr, "slock-"VERSION"\n");
147 return 0;
148 + case 'm':
149 + message = EARGF(usage());
150 + break;
151 default:
152 usage();
153 } ARGEND
154 @@ -363,10 +432,12 @@ main(int argc, char **argv) {
155 if (!(locks = calloc(nscreens, sizeof(struct lock *))))
156 die("slock: out of memory\n");
157 for (nlocks = 0, s = 0; s < nscreens; s++) {
158 - if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL)
159 + if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL) {
160 + writemessage(dpy, locks[s]->win, s);
161 nlocks++;
162 - else
163 + } else {
164 break;
165 + }
166 }
167 XSync(dpy, 0);
168
169 --
170 2.17.1
171
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.