diff --git a/libs/fifo.c b/libs/fifo.c index 048b67f..8d793eb 100644 --- a/libs/fifo.c +++ b/libs/fifo.c @@ -20,6 +20,8 @@ void execute_fifo_cmd(void) { if (!r) { close(fd); + done = 1; + return; } @@ -115,7 +117,7 @@ void execute_fifo_cmd(void) { setlines(&arg); } else if (!strcmp(fifot, "setcolumns+")) { Arg arg; - arg.i = +1; + arg.i = 1; setcolumns(&arg); } else if (!strcmp(fifot, "setcolumns-")) { Arg arg; @@ -183,22 +185,24 @@ void execute_fifo_cmd(void) { close(fd); + remove(fifofile); + mkfifo(fifofile, 0660); + done = 1; } void *fifocmd(void *n) { for (;;) { - msleep(0.1); - if (done) { execute_fifo_cmd(); } + + msleep(0.1); } } void init_fifo(void) { - mkfifo(fifofile, 0666); - + mkfifo(fifofile, 0660); pthread_t tid; pthread_create(&tid, NULL, &fifocmd, NULL); } diff --git a/scripts/spmenu_path b/scripts/spmenu_path index d288951..f596ce4 100755 --- a/scripts/spmenu_path +++ b/scripts/spmenu_path @@ -162,7 +162,7 @@ exec_cmd() { [ -z "$EXEC" ] && EXEC=shell [ "$STDOUT" != "false" ] && printf "%s\n" "$sout" && exit 1 - if [ -d "$sout" ]; then + if [ -d "$sout" ] && [ ! -f "$(command -v "$sout")" ]; then load_x "spmenu_fm" dir="$sout" prepare_dirnav diff --git a/spmenu.1 b/spmenu.1 index d7820fd..82c1126 100644 --- a/spmenu.1 +++ b/spmenu.1 @@ -874,6 +874,12 @@ Otherwise it will be considered invalid. It is recommended that you sleep for 0.1 seconds after appending to the file for performance reasons. .PP +\f[B]NOTE: Please remove /tmp/spmenu.fifo if it exists after usage, +especially in scripts. +Otherwise the FIFO action may be carried over to the user\[cq]s next +spmenu use. +If you love your users, do not ignore this warning.\f[R] +.PP .TS tab(@); lw(12.7n) lw(57.3n). diff --git a/spmenu.c b/spmenu.c index 9ef9e81..9b3751c 100644 --- a/spmenu.c +++ b/spmenu.c @@ -393,6 +393,10 @@ void cleanup(void) { } #endif +#if FIFO + remove(fifofile); +#endif + free(sel_index); } @@ -555,11 +559,10 @@ void handle(void) { init_appearance(); // init colorschemes by reading arrays + setupdisplay_x11(); // set up display and create window #if FIFO init_fifo(); #endif - - setupdisplay_x11(); // set up display and create window eventloop_x11(); // function is a loop which checks X11 events and calls other functions accordingly #endif #if WAYLAND