Version bump: 3.3 #26
10
docs/docs.md
10
docs/docs.md
|
@ -782,6 +782,12 @@ for performance reasons.
|
||||||
| setlines- | Decrease lines by 1 |
|
| setlines- | Decrease lines by 1 |
|
||||||
| setcolumns+ | Increase columns by 1 |
|
| setcolumns+ | Increase columns by 1 |
|
||||||
| setcolumns- | Decrease columns by 1 |
|
| setcolumns- | Decrease columns by 1 |
|
||||||
|
| setx+ | Increase X position by 1 |
|
||||||
|
| setx- | Decrease X position by 1 |
|
||||||
|
| sety+ | Increase Y position by 1 |
|
||||||
|
| sety- | Decrease Y position by 1 |
|
||||||
|
| setw+ | Increase width by 1 |
|
||||||
|
| setw- | Decrease width by 1 |
|
||||||
| moveup | Move up one item |
|
| moveup | Move up one item |
|
||||||
| movedown | Move down one item |
|
| movedown | Move down one item |
|
||||||
| moveleft | Move left one item |
|
| moveleft | Move left one item |
|
||||||
|
@ -1175,6 +1181,10 @@ bind:
|
||||||
- Set lines to passed argument
|
- Set lines to passed argument
|
||||||
- `setcolumns`
|
- `setcolumns`
|
||||||
- Set columns to passed argument
|
- Set columns to passed argument
|
||||||
|
- `setx`
|
||||||
|
- Set X position to passed argument
|
||||||
|
- `sety`
|
||||||
|
- Set Y position to passed argument
|
||||||
- `setlineheight`
|
- `setlineheight`
|
||||||
- Set line height to passed argument
|
- Set line height to passed argument
|
||||||
- `setprofile`
|
- `setprofile`
|
||||||
|
|
21
libs/arg.c
21
libs/arg.c
|
@ -600,6 +600,27 @@ void setcolumns(Arg *arg) {
|
||||||
drawmenu();
|
drawmenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setx(Arg *arg) {
|
||||||
|
xpos += arg->i;
|
||||||
|
|
||||||
|
resizeclient();
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sety(Arg *arg) {
|
||||||
|
ypos += arg->i;
|
||||||
|
|
||||||
|
resizeclient();
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setw(Arg *arg) {
|
||||||
|
menuwidth += arg->i;
|
||||||
|
|
||||||
|
resizeclient();
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
void spawn(Arg *arg) {
|
void spawn(Arg *arg) {
|
||||||
if (!system(arg->c))
|
if (!system(arg->c))
|
||||||
die("spmenu: failed to execute command '%s'", arg->c);
|
die("spmenu: failed to execute command '%s'", arg->c);
|
||||||
|
|
|
@ -57,6 +57,9 @@ static void screenshot(Arg *arg);
|
||||||
static void switchmode(Arg *arg);
|
static void switchmode(Arg *arg);
|
||||||
static void setprofile(Arg *arg);
|
static void setprofile(Arg *arg);
|
||||||
static void setlineheight(Arg *arg);
|
static void setlineheight(Arg *arg);
|
||||||
|
static void setx(Arg *arg);
|
||||||
|
static void sety(Arg *arg);
|
||||||
|
static void setw(Arg *arg);
|
||||||
static void quit(Arg *arg);
|
static void quit(Arg *arg);
|
||||||
|
|
||||||
/* toggle */
|
/* toggle */
|
||||||
|
|
|
@ -377,6 +377,9 @@ static FuncList fl[] = {
|
||||||
{ "setlines", setlines },
|
{ "setlines", setlines },
|
||||||
{ "screenshot", screenshot },
|
{ "screenshot", screenshot },
|
||||||
{ "setcolumns", setcolumns },
|
{ "setcolumns", setcolumns },
|
||||||
|
{ "setx", setx },
|
||||||
|
{ "sety", sety },
|
||||||
|
{ "setw", setw },
|
||||||
{ "toggleinput", toggleinput },
|
{ "toggleinput", toggleinput },
|
||||||
{ "togglepretext", togglepretext },
|
{ "togglepretext", togglepretext },
|
||||||
{ "togglelarrow", togglelarrow },
|
{ "togglelarrow", togglelarrow },
|
||||||
|
|
36
libs/fifo.c
36
libs/fifo.c
|
@ -29,12 +29,16 @@ void execute_fifo_cmd(void) {
|
||||||
* by outputting text to the FIFO.
|
* by outputting text to the FIFO.
|
||||||
*/
|
*/
|
||||||
if (!strcmp(fifot, "drawmenu")) {
|
if (!strcmp(fifot, "drawmenu")) {
|
||||||
drawmenu();
|
if (!sp.isdrawing) {
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
} else if (!strcmp(fifot, "match")) {
|
} else if (!strcmp(fifot, "match")) {
|
||||||
match();
|
match();
|
||||||
} else if (!strcmp(fifot, "update")) {
|
} else if (!strcmp(fifot, "update")) {
|
||||||
match();
|
if (!sp.isdrawing) {
|
||||||
drawmenu();
|
match();
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
} else if (!strcmp(fifot, "test")) {
|
} else if (!strcmp(fifot, "test")) {
|
||||||
fprintf(stderr, "Test print\n");
|
fprintf(stderr, "Test print\n");
|
||||||
} else if (!strcmp(fifot, "die")) {
|
} else if (!strcmp(fifot, "die")) {
|
||||||
|
@ -109,7 +113,7 @@ void execute_fifo_cmd(void) {
|
||||||
setprofile(&arg);
|
setprofile(&arg);
|
||||||
} else if (!strcmp(fifot, "setlines+")) {
|
} else if (!strcmp(fifot, "setlines+")) {
|
||||||
Arg arg;
|
Arg arg;
|
||||||
arg.i = +1;
|
arg.i = 1;
|
||||||
setlines(&arg);
|
setlines(&arg);
|
||||||
} else if (!strcmp(fifot, "setlines-")) {
|
} else if (!strcmp(fifot, "setlines-")) {
|
||||||
Arg arg;
|
Arg arg;
|
||||||
|
@ -123,6 +127,30 @@ void execute_fifo_cmd(void) {
|
||||||
Arg arg;
|
Arg arg;
|
||||||
arg.i = -1;
|
arg.i = -1;
|
||||||
setcolumns(&arg);
|
setcolumns(&arg);
|
||||||
|
} else if (!strcmp(fifot, "setx+")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = 1;
|
||||||
|
setx(&arg);
|
||||||
|
} else if (!strcmp(fifot, "setx-")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = -1;
|
||||||
|
setx(&arg);
|
||||||
|
} else if (!strcmp(fifot, "sety+")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = 1;
|
||||||
|
sety(&arg);
|
||||||
|
} else if (!strcmp(fifot, "sety-")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = -1;
|
||||||
|
sety(&arg);
|
||||||
|
} else if (!strcmp(fifot, "setw+")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = 1;
|
||||||
|
setw(&arg);
|
||||||
|
} else if (!strcmp(fifot, "setw-")) {
|
||||||
|
Arg arg;
|
||||||
|
arg.i = -1;
|
||||||
|
setw(&arg);
|
||||||
} else if (!strcmp(fifot, "moveup")) {
|
} else if (!strcmp(fifot, "moveup")) {
|
||||||
Arg arg;
|
Arg arg;
|
||||||
moveup(&arg);
|
moveup(&arg);
|
||||||
|
|
|
@ -365,8 +365,8 @@ void resizetoimageheight_x11(int imageheight) {
|
||||||
x = (mo.output_width - sp.mw) / 2 + xpos;
|
x = (mo.output_width - sp.mw) / 2 + xpos;
|
||||||
y = (mo.output_height - sp.mh) / 2 - ypos;
|
y = (mo.output_height - sp.mh) / 2 - ypos;
|
||||||
} else { // top or bottom
|
} else { // top or bottom
|
||||||
x = 0;
|
x = xpos;
|
||||||
y = menuposition ? 0 : mo.output_width - sp.mh - ypos;
|
y = menuposition ? (-ypos) : (mo.output_height - sp.mh - ypos);
|
||||||
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,7 @@ struct wl_buffer *create_buffer(struct state *state) {
|
||||||
size_t siz = stride * height;
|
size_t siz = stride * height;
|
||||||
|
|
||||||
int fd = create_shm_file(siz);
|
int fd = create_shm_file(siz);
|
||||||
|
assert(fd != -1);
|
||||||
if (fd == -1) {
|
|
||||||
die("create_buffer(): fd == -1");
|
|
||||||
}
|
|
||||||
|
|
||||||
void *data = mmap(NULL, siz, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
void *data = mmap(NULL, siz, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
|
|
||||||
|
@ -89,7 +86,7 @@ char *wl_clipboard(void) {
|
||||||
fp = popen("which wl-paste > /dev/null && wl-paste -t text/plain", "r");
|
fp = popen("which wl-paste > /dev/null && wl-paste -t text/plain", "r");
|
||||||
|
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "wl_clipboard(): Failed to open command\n");
|
fprintf(stderr, "spmenu: Failed to open command\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +244,7 @@ void keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, uint32_t forma
|
||||||
char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
|
char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||||
if (map_shm == MAP_FAILED) {
|
if (map_shm == MAP_FAILED) {
|
||||||
close(fd);
|
close(fd);
|
||||||
die("keyboard_keymap(): MAP_FAILED");
|
die("MAP_FAILED");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state->xkb_keymap = xkb_keymap_new_from_string(state->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, 0);
|
state->xkb_keymap = xkb_keymap_new_from_string(state->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, 0);
|
||||||
|
@ -483,11 +480,11 @@ void create_drawable(struct state *state) {
|
||||||
state->buffer = create_buffer(state);
|
state->buffer = create_buffer(state);
|
||||||
|
|
||||||
if (draw == NULL) {
|
if (draw == NULL) {
|
||||||
die("create_drawable(): A drawable was not created.");
|
die("spmenu: draw == NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->buffer == NULL) {
|
if (state->buffer == NULL) {
|
||||||
die("create_drawable(): Buffer state->buffer could not be created.");
|
die("state->buffer == NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_create_surface_wl(draw, state->data, state->width, state->height);
|
draw_create_surface_wl(draw, state->data, state->width, state->height);
|
||||||
|
@ -572,13 +569,13 @@ int await_dispatch(struct state *state) {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (wl_display_flush(state->display) == -1 && errno != EAGAIN) {
|
if (wl_display_flush(state->display) == -1 && errno != EAGAIN) {
|
||||||
fprintf(stderr, "await_dispatch(): wl_display_flush failed: %s\n", strerror(errno));
|
fprintf(stderr, "spmenu: wl_display_flush failed: %s\n", strerror(errno));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (errno == EAGAIN);
|
} while (errno == EAGAIN);
|
||||||
|
|
||||||
if (poll(fds, nfds, -1) < 0) {
|
if (poll(fds, nfds, -1) < 0) {
|
||||||
fprintf(stderr, "await_dispatch(): poll failed: %s\n", strerror(errno));
|
fprintf(stderr, "spmenu: poll failed: %s\n", strerror(errno));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -611,17 +608,13 @@ int init_disp(struct state *state) {
|
||||||
wl_registry_add_listener(registry, ®istry_listener, state);
|
wl_registry_add_listener(registry, ®istry_listener, state);
|
||||||
wl_display_roundtrip(state->display);
|
wl_display_roundtrip(state->display);
|
||||||
|
|
||||||
if (state->compositor == NULL) {
|
assert(state->compositor != NULL);
|
||||||
die("init_disp(): No Wayland compositor.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state->layer_shell == NULL) {
|
if (state->layer_shell == NULL) {
|
||||||
die("init_disp(): Your compositor does not implement the wlr-layer-shell protocol.");
|
die("spmenu: Your compositor does not implement the wlr-layer-shell protocol. Run spmenu in X11 mode.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->shm == NULL) {
|
assert(state->shm != NULL);
|
||||||
die("init_disp(): Could not create shared memory buffer.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
wl_display_roundtrip(state->display);
|
wl_display_roundtrip(state->display);
|
||||||
|
|
||||||
|
@ -660,7 +653,7 @@ void resizeclient_wl(struct state *state) {
|
||||||
state->buffer = create_buffer(state);
|
state->buffer = create_buffer(state);
|
||||||
|
|
||||||
if (draw == NULL) {
|
if (draw == NULL) {
|
||||||
die("resizeclient_wl(): Draw_t is NULL.");
|
die("spmenu: draw == NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->buffer == NULL) {
|
if (state->buffer == NULL) {
|
||||||
|
@ -698,19 +691,12 @@ int init_keys(struct state *state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int create_layer(struct state *state, char *name) {
|
int create_layer(struct state *state, char *name) {
|
||||||
if (state->compositor == NULL) {
|
assert(state->compositor != NULL);
|
||||||
die("create_layer(): No Wayland compositor.");
|
|
||||||
}
|
|
||||||
|
|
||||||
state->surface = wl_compositor_create_surface(state->compositor);
|
state->surface = wl_compositor_create_surface(state->compositor);
|
||||||
|
|
||||||
if (state->surface == NULL) {
|
assert(state->surface != NULL);
|
||||||
die("create_layer(): Could not create surface state->surface using state->compositor");
|
assert(state->layer_shell != NULL);
|
||||||
}
|
|
||||||
|
|
||||||
if (state->layer_shell == NULL) {
|
|
||||||
die("create_layer(): Your compositor does not implement the wlr-layer-shell protocol. Run spmenu in X11 mode.");
|
|
||||||
}
|
|
||||||
|
|
||||||
wl_surface_add_listener(state->surface, &surface_listener, state);
|
wl_surface_add_listener(state->surface, &surface_listener, state);
|
||||||
state->layer_surface = zwlr_layer_shell_v1_get_layer_surface(
|
state->layer_surface = zwlr_layer_shell_v1_get_layer_surface(
|
||||||
|
@ -720,18 +706,13 @@ int create_layer(struct state *state, char *name) {
|
||||||
ZWLR_LAYER_SHELL_V1_LAYER_TOP,
|
ZWLR_LAYER_SHELL_V1_LAYER_TOP,
|
||||||
name);
|
name);
|
||||||
|
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("create_layer(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int anchor_layer(struct state *state, int position) {
|
int anchor_layer(struct state *state, int position) {
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("anchor_layer(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_anchor(
|
zwlr_layer_surface_v1_set_anchor(
|
||||||
state->layer_surface,
|
state->layer_surface,
|
||||||
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
|
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
|
||||||
|
@ -744,9 +725,7 @@ int anchor_layer(struct state *state, int position) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_layer_size(struct state *state, int32_t width, int32_t height) {
|
int set_layer_size(struct state *state, int32_t width, int32_t height) {
|
||||||
if (state->layer_surface != NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("set_layer_size(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_size(state->layer_surface, width, height);
|
zwlr_layer_surface_v1_set_size(state->layer_surface, width, height);
|
||||||
|
|
||||||
|
@ -754,9 +733,7 @@ int set_layer_size(struct state *state, int32_t width, int32_t height) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_exclusive_zone(struct state *state, unsigned int val) {
|
int set_exclusive_zone(struct state *state, unsigned int val) {
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("set_exclusive_zone(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_exclusive_zone(state->layer_surface, val);
|
zwlr_layer_surface_v1_set_exclusive_zone(state->layer_surface, val);
|
||||||
|
|
||||||
|
@ -764,9 +741,7 @@ int set_exclusive_zone(struct state *state, unsigned int val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_keyboard(struct state *state, int interactivity) {
|
int set_keyboard(struct state *state, int interactivity) {
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("set_keyboard(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_keyboard_interactivity(state->layer_surface, interactivity ? true : false);
|
zwlr_layer_surface_v1_set_keyboard_interactivity(state->layer_surface, interactivity ? true : false);
|
||||||
|
|
||||||
|
@ -774,9 +749,7 @@ int set_keyboard(struct state *state, int interactivity) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int add_layer_listener(struct state *state) {
|
int add_layer_listener(struct state *state) {
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("add_layer_listener(): Could not get layer_surface state->layer_surface");
|
|
||||||
}
|
|
||||||
|
|
||||||
zwlr_layer_surface_v1_add_listener(state->layer_surface, &layer_surface_listener, state);
|
zwlr_layer_surface_v1_add_listener(state->layer_surface, &layer_surface_listener, state);
|
||||||
|
|
||||||
|
@ -784,9 +757,8 @@ int add_layer_listener(struct state *state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_visible_layer(struct state *state) {
|
int set_visible_layer(struct state *state) {
|
||||||
if (state->layer_surface == NULL) {
|
assert(state->layer_surface != NULL);
|
||||||
die("set_visible_layer(): Could not get layer_surface state->layer_surface");
|
assert(state->surface != NULL);
|
||||||
}
|
|
||||||
|
|
||||||
wl_surface_commit(state->surface);
|
wl_surface_commit(state->surface);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/timerfd.h>
|
#include <sys/timerfd.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <wayland-client.h>
|
#include <wayland-client.h>
|
||||||
|
|
|
@ -70,7 +70,6 @@ void set_prop_x11(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void resizeclient_x11(void) {
|
void resizeclient_x11(void) {
|
||||||
int mh = sp.mh;
|
|
||||||
int x, y;
|
int x, y;
|
||||||
struct item *item;
|
struct item *item;
|
||||||
int ic = 0; // item count
|
int ic = 0; // item count
|
||||||
|
@ -98,14 +97,11 @@ void resizeclient_x11(void) {
|
||||||
x = (mo.output_width - sp.mw) / 2 + xpos;
|
x = (mo.output_width - sp.mw) / 2 + xpos;
|
||||||
y = (mo.output_height - sp.mh) / 2 - ypos;
|
y = (mo.output_height - sp.mh) / 2 - ypos;
|
||||||
} else { // top or bottom
|
} else { // top or bottom
|
||||||
x = 0;
|
x = xpos;
|
||||||
y = menuposition ? 0 : mo.output_height - sp.mh - ypos;
|
y = menuposition ? (-ypos) : (mo.output_height - sp.mh - ypos);
|
||||||
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
// no window/invalid window or menu height we had before is the same as the current window height
|
|
||||||
if (!win || mh == sp.mh) return;
|
|
||||||
|
|
||||||
XMoveResizeWindow(dpy, win, x + sp.sp, y + sp.vp, sp.mw - 2 * sp.sp - borderwidth * 2, sp.mh);
|
XMoveResizeWindow(dpy, win, x + sp.sp, y + sp.vp, sp.mw - 2 * sp.sp - borderwidth * 2, sp.mh);
|
||||||
draw_resize(draw, sp.mw - 2 * sp.sp - borderwidth * 2, sp.mh);
|
draw_resize(draw, sp.mw - 2 * sp.sp - borderwidth * 2, sp.mh);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,8 +71,8 @@ void setupdisplay_x11(void) {
|
||||||
x = (mo.output_width - sp.mw) / 2 + xpos;
|
x = (mo.output_width - sp.mw) / 2 + xpos;
|
||||||
y = (mo.output_height - sp.mh) / 2 - ypos;
|
y = (mo.output_height - sp.mh) / 2 - ypos;
|
||||||
} else { // top or bottom
|
} else { // top or bottom
|
||||||
x = 0;
|
x = xpos;
|
||||||
y = menuposition ? 0 : mo.output_height - sp.mh - ypos;
|
y = menuposition ? (-ypos) : (mo.output_height - sp.mh - ypos);
|
||||||
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
sp.mw = (menuwidth > 0 ? menuwidth : mo.output_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
48
spmenu.1
48
spmenu.1
|
@ -874,12 +874,6 @@ Otherwise it will be considered invalid.
|
||||||
It is recommended that you sleep for 0.1 seconds after appending to the
|
It is recommended that you sleep for 0.1 seconds after appending to the
|
||||||
file for performance reasons.
|
file for performance reasons.
|
||||||
.PP
|
.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
|
.TS
|
||||||
tab(@);
|
tab(@);
|
||||||
lw(12.7n) lw(57.3n).
|
lw(12.7n) lw(57.3n).
|
||||||
|
@ -1041,6 +1035,36 @@ T}@T{
|
||||||
Decrease columns by 1
|
Decrease columns by 1
|
||||||
T}
|
T}
|
||||||
T{
|
T{
|
||||||
|
setx+
|
||||||
|
T}@T{
|
||||||
|
Increase X position by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
setx-
|
||||||
|
T}@T{
|
||||||
|
Decrease X position by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
sety+
|
||||||
|
T}@T{
|
||||||
|
Increase Y position by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
sety-
|
||||||
|
T}@T{
|
||||||
|
Decrease Y position by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
setw+
|
||||||
|
T}@T{
|
||||||
|
Increase width by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
setw-
|
||||||
|
T}@T{
|
||||||
|
Decrease width by 1
|
||||||
|
T}
|
||||||
|
T{
|
||||||
moveup
|
moveup
|
||||||
T}@T{
|
T}@T{
|
||||||
Move up one item
|
Move up one item
|
||||||
|
@ -2517,6 +2541,18 @@ Set lines to passed argument
|
||||||
Set columns to passed argument
|
Set columns to passed argument
|
||||||
.RE
|
.RE
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
|
\f[V]setx\f[R]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Set X position to passed argument
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\f[V]sety\f[R]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Set Y position to passed argument
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
\f[V]setlineheight\f[R]
|
\f[V]setlineheight\f[R]
|
||||||
.RS 2
|
.RS 2
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
|
|
4
spmenu.c
4
spmenu.c
|
@ -510,11 +510,11 @@ void get_mh(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_mode(void) {
|
void set_mode(void) {
|
||||||
if (!type) {
|
if (!type) { // no typing allowed, require normal mode
|
||||||
sp.mode = 0;
|
sp.mode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set default mode
|
// set default mode, must be done before the event loop or keybindings will not work
|
||||||
if (mode) {
|
if (mode) {
|
||||||
sp.mode = 1;
|
sp.mode = 1;
|
||||||
sp.allowkeys = 1;
|
sp.allowkeys = 1;
|
||||||
|
|
Loading…
Reference in a new issue