From 6ec7c668cfc101b89076aa6226714397a66065a1 Mon Sep 17 00:00:00 2001 From: Chris Guillott Date: Tue, 30 May 2017 21:47:18 -0400 Subject: [PATCH] add some more options --- README.md | 5 ++++ i3lock.1 | 28 ++++++++++++++++++--- i3lock.c | 62 +++++++++++++++++++++++++++++++++++++++------- unlock_indicator.c | 18 ++++++++++---- 4 files changed, 95 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 2afd6cd..ea20dc3 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,11 @@ Many little improvements have been made to i3lock over time: - `--datecolor=rrggbbaa` -- color of the date string - `--datefont="sans-serif"` -- font used for the date display - `--datesize=14` -- font size for the date display + - `--veriftext="verifying…" -- text to be shown while verifying + - `--wrongtext="wrong!" -- text to be shown upon an incorrect password being entered + - `--textsize=28` -- font size for the status text + - `--modsize=14` -- font size for the modifier keys listing + - `--radius=90` -- the radius of the circle indicator - You can specify whether i3lock should bell upon a wrong password. diff --git a/i3lock.1 b/i3lock.1 index 2734288..6b8a208 100644 --- a/i3lock.1 +++ b/i3lock.1 @@ -194,8 +194,8 @@ Sets the format used for generating the time string. See strftime(3) for a full Sets the font used to render the time string. .TP -.B \-\-timesize=32 -Sets the font size for rendering the time string. +.B \-\-timesize=number +Sets the font size for rendering the time string. Defaults to 32. .TP .B \-\-timepos="x position:y position" @@ -234,8 +234,8 @@ Sets the format used for generating the date string. See strftime(3) for a full Sets the font used to render the date string. .TP -.B \-\-datesize=14 -Sets the font size for rendering the date string. +.B \-\-datesize=number +Sets the font size for rendering the date string. Defaults to 14. .TP .B \-\-datepos="x position:y position" @@ -254,6 +254,26 @@ ty - the computed y value of the timestring, for the current display. .B \-\-refresh\-rate=seconds The refresh rate of the indicator, given in seconds. This should automatically align itself, but is somewhat buggy currently. +.TP +.B \-\-veriftext="text" +Sets the string to be shown while verifying the password/input/key/etc. Defaults to "verifying…". + +.TP +.B \-\-wrongtext="text" +Sets the string to be shown upon entering an incorrect password. Defaults to "wrong!". + +.TP +.B \-\-textsize=number +The fontsize of the status text. Defaults to 28. + +.TP +.B \-\-modsize=number +The fontsize of the text listing all the active modifiers (caps lock, num lock, etc). Defaults to 14. + +.TP +.B \-\-radius +The radius of the circle. Defaults to 90. + .SH DPMS The \-d (\-\-dpms) option was removed from i3lock in version 2.8. There were diff --git a/i3lock.c b/i3lock.c index fb698ff..af79428 100644 --- a/i3lock.c +++ b/i3lock.c @@ -96,8 +96,14 @@ char time_y_expr[32] = "iy - (ch / 2)\0"; char date_x_expr[32] = "tx\0"; char date_y_expr[32] = "ty+30\0"; -double time_size = 32; -double date_size = 14; +double time_size = 32.0; +double date_size = 14.0; +double text_size = 28.0; +double modifier_size = 14.0; +double circle_radius = 90.0; + +char* verif_text = "verifying…"; +char* wrong_text = "wrong!"; /* opts for blurring */ bool blur = false; @@ -894,7 +900,9 @@ int main(int argc, char *argv[]) { {"no-unlock-indicator", no_argument, NULL, 'u'}, {"image", required_argument, NULL, 'i'}, {"tiling", no_argument, NULL, 't'}, - + {"ignore-empty-password", no_argument, NULL, 'e'}, + {"inactivity-timeout", required_argument, NULL, 'I'}, + {"show-failed-attempts", no_argument, NULL, 'f'}, /* options for unlock indicator colors */ // defining a lot of different chars here for the options -- TODO find a nicer way for this, maybe not offering single character options at all {"insidevercolor", required_argument, NULL, 0}, // --i-v @@ -915,7 +923,7 @@ int main(int argc, char *argv[]) { /* s for in_s_ide; ideally I'd use -I but that's used for timeout, which should use -T, but compatibility argh * note: `I` has been deprecated for a while, so I might just remove that and reshuffle that? */ {"screen", required_argument, NULL, 'S'}, - + {"blur", required_argument, NULL, 'B'}, {"clock", no_argument, NULL, 'k'}, {"indicator", no_argument, NULL, 0}, {"refresh-rate", required_argument, NULL, 0}, @@ -930,11 +938,12 @@ int main(int argc, char *argv[]) { {"timepos", required_argument, NULL, 0}, {"datepos", required_argument, NULL, 0}, - {"blur", required_argument, NULL, 'B'}, + {"veriftext", required_argument, NULL, 0}, + {"wrongtext", required_argument, NULL, 0}, + {"textsize", required_argument, NULL, 0}, + {"modsize", required_argument, NULL, 0}, + {"radius", required_argument, NULL, 0}, - {"ignore-empty-password", no_argument, NULL, 'e'}, - {"inactivity-timeout", required_argument, NULL, 'I'}, - {"show-failed-attempts", no_argument, NULL, 'f'}, {NULL, no_argument, NULL, 0}}; if ((pw = getpwuid(getuid())) == NULL) @@ -1230,12 +1239,47 @@ int main(int argc, char *argv[]) { else if (strcmp(longopts[optind].name, "no-composite") == 0) { composite = false; } + else if (strcmp(longopts[optind].name, "veriftext") == 0) { + verif_text = optarg; + } + else if (strcmp(longopts[optind].name, "wrongtext") == 0) { + wrong_text = optarg; + } + else if (strcmp(longopts[optind].name, "textsize") == 0) { + char *arg = optarg; + + if (sscanf(arg, "%lf", &text_size) != 1) + errx(1, "textsize must be a number\n"); + if (time_size < 1) { + fprintf(stderr, "textsize must be a positive integer; ignoring...\n"); + text_size = 28.0; + } + } + else if (strcmp(longopts[optind].name, "modsize") == 0) { + char *arg = optarg; + + if (sscanf(arg, "%lf", &modifier_size) != 1) + errx(1, "modsize must be a number\n"); + if (modifier_size < 1) { + fprintf(stderr, "modsize must be a positive integer; ignoring...\n"); + modifier_size = 14.0; + } + } + else if (strcmp(longopts[optind].name, "radius") == 0) { + char *arg = optarg; + + if (sscanf(arg, "%lf", &circle_radius) != 1) + errx(1, "radius must be a number\n"); + if (circle_radius < 1) { + fprintf(stderr, "radius must be a positive integer; ignoring...\n"); + text_size = 90.0; + } + } break; case 'f': show_failed_attempts = true; break; default: - // TODO: clean this up, use newlines errx(EXIT_FAILURE, "Syntax: i3lock [-v] [-n] [-b] [-d] [-c color] [-u] [-p win|default]" " [-i image.png] [-t] [-e] [-f]\n" "Please see the manpage for a full list of arguments."); diff --git a/unlock_indicator.c b/unlock_indicator.c index a0bcd50..f6be413 100644 --- a/unlock_indicator.c +++ b/unlock_indicator.c @@ -25,7 +25,9 @@ /* clock stuff */ #include -#define BUTTON_RADIUS 90 +extern double circle_radius; + +#define BUTTON_RADIUS (circle_radius) #define BUTTON_SPACE (BUTTON_RADIUS + 5) #define BUTTON_CENTER (BUTTON_RADIUS + 5) #define BUTTON_DIAMETER (2 * BUTTON_SPACE) @@ -94,6 +96,12 @@ extern char date_y_expr[32]; extern double time_size; extern double date_size; +extern double text_size; +extern double modifier_size; + +extern char* verif_text; +extern char* wrong_text; + /* Whether the failed attempts should be displayed. */ extern bool show_failed_attempts; /* Number of failed unlock attempts. */ @@ -394,16 +402,16 @@ xcb_pixmap_t draw_image(uint32_t *resolution) { cairo_set_source_rgba(ctx, (double)text16[0]/255, (double)text16[1]/255, (double)text16[2]/255, (double)text16[3]/255); cairo_select_font_face(ctx, "sans-serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_set_font_size(ctx, 28.0); + cairo_set_font_size(ctx, text_size); switch (auth_state) { case STATE_AUTH_VERIFY: - text = "verifying…"; + text = verif_text; break; case STATE_AUTH_LOCK: text = "locking…"; break; case STATE_AUTH_WRONG: - text = "wrong!"; + text = wrong_text; break; case STATE_I3LOCK_LOCK_FAILED: text = "lock failed!"; @@ -439,7 +447,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) { cairo_text_extents_t extents; double x, y; - cairo_set_font_size(ctx, 14.0); + cairo_set_font_size(ctx, modifier_size); cairo_text_extents(ctx, modifier_string, &extents); x = BUTTON_CENTER - ((extents.width / 2) + extents.x_bearing);