Compare commits

...

3 Commits

Author SHA1 Message Date
Martin J. Klöckner 13c15025df
Merge 9b5cfe7df5 into 46aa0b3719 2024-01-29 08:39:54 +08:00
James Pilcher 46aa0b3719
Removed dead link from README (#293) 2024-01-17 21:20:14 -08:00
mjkloeckner 9b5cfe7df5 Dynamically update the greeter text
Adds new flag: `--greeter-cmd`, which accepts a command name to execute
and sets the output to the greeter text. If the screen is idle, the
command gets executed every second, if the user is typing the command
gets executed in every keypress.

This new flag conflicts with `--greeter-text` because when the output
from the command gets captured it overrides the variable containing the
greeter text passed with `--greeter-text`, so they can't be used
together.
2023-05-19 15:16:54 -03:00
4 changed files with 34 additions and 2 deletions

View File

@ -158,7 +158,7 @@ A FreeBSD port is available on freshports: [x11/i3lock-color/](https://www.fresh
## Running i3lock-color
Simply invoke the 'i3lock' command. To get out of it, enter your password and press enter.
A [sample script](examples/lock.sh) is included in this repository. [See the script in action](https://streamable.com/fpl46)
A [sample script](examples/lock.sh) is included in this repository.
On OpenBSD the `i3lock` binary needs to be setgid `auth` to call the authentication helpers, e.g. `/usr/libexec/auth/login_passwd`.

View File

@ -110,6 +110,7 @@ int internal_line_source = 0;
float refresh_rate = 1.0;
bool show_clock = false;
bool update_greeter = false;
bool slideshow_enabled = false;
bool always_show_clock = false;
bool show_indicator = false;
@ -198,6 +199,7 @@ char* lock_failed_text = "lock failed!";
int keylayout_mode = -1;
char* layout_text = NULL;
char* greeter_text = "";
char* greeter_cmd = "";
/* opts for blurring */
bool blur = false;
@ -1603,6 +1605,7 @@ int main(int argc, char *argv[]) {
{"indicator", no_argument, NULL, 401},
{"radius", required_argument, NULL, 402},
{"ring-width", required_argument, NULL, 403},
{"greeter-cmd", required_argument, NULL, 404},
// alignment
{"time-align", required_argument, NULL, 500},
@ -1940,6 +1943,10 @@ int main(int argc, char *argv[]) {
fprintf(stderr, "ring-width must be a positive float; ignoring...\n");
ring_width = 7.0;
}
break;
case 404:
update_greeter = true;
greeter_cmd = optarg;
break;
// Alignment stuff
@ -2014,6 +2021,9 @@ int main(int argc, char *argv[]) {
lock_failed_text = optarg;
break;
case 518:
if (greeter_cmd) {
errx(EXIT_FAILURE, "i3lock-color: Options greeter-text and greeter-cmd conflict.");
}
greeter_text = optarg;
break;
case 519:
@ -2626,7 +2636,7 @@ int main(int argc, char *argv[]) {
* file descriptor becomes readable). */
ev_invoke(main_loop, xcb_check, 0);
if (show_clock || bar_enabled || slideshow_enabled) {
if (show_clock || bar_enabled || slideshow_enabled || update_greeter) {
if (redraw_thread) {
struct timespec ts;
double s;
@ -2659,3 +2669,19 @@ int main(int argc, char *argv[]) {
return 0;
}
void update_greeter_text() {
FILE *fp;
static char file_text[128];
memset(file_text,0,sizeof(file_text));
DEBUG("greeter_cmd is: [%s]\n", greeter_cmd);
if((fp = popen(greeter_cmd, "r")) == NULL)
return;
fread(file_text, sizeof(char), sizeof(file_text), fp);
pclose(fp);
greeter_text = file_text;
}

View File

@ -15,4 +15,6 @@
} \
} while (0)
void update_greeter_text();
#endif

View File

@ -109,6 +109,7 @@ extern int screen_number;
extern float refresh_rate;
extern bool show_clock;
extern bool update_greeter;
extern bool always_show_clock;
extern bool show_indicator;
extern int verif_align;
@ -920,6 +921,9 @@ void render_lock(uint32_t *resolution, xcb_drawable_t drawable) {
}
if (greeter_text) {
if(update_greeter) {
update_greeter_text();
}
draw_data.greeter_text.show = true;
strncpy(draw_data.greeter_text.str, greeter_text, sizeof(draw_data.greeter_text.str) - 1);
draw_data.greeter_text.size = greeter_size;