add keybinds for setting line/columns

This commit is contained in:
speedie 2023-03-13 22:45:04 +01:00
parent 5bba5d9bc9
commit 71090e7aa3
8 changed files with 60 additions and 8 deletions

View file

@ -66,6 +66,10 @@ static Key keys[] = {
{ 0, 0, XK_j, move, {.i = 2 } },
{ 0, 0, XK_h, move, {.i = 3 } },
{ 0, 0, XK_l, move, {.i = 4 } },
{ 0, CONTROL, XK_k, setlines, {.i = +1 } },
{ 0, CONTROL, XK_j, setlines, {.i = -1 } },
{ 0, CONTROL, XK_h, setcolumns, {.i = +1 } },
{ 0, CONTROL, XK_l, setcolumns, {.i = -1 } },
{ 0, CONTROL, XK_k, restoresel, {0} },
{ 0, CONTROL, XK_h, viewhist, {0} },
{ 0, CONTROL, XK_u, clear, {0} },

View file

@ -396,3 +396,25 @@ defaultimg(const Arg *arg)
drawmenu();
#endif
}
void
setlines(const Arg *arg)
{
lines += arg->i;
if (lines < 0) lines = 0;
match();
resizeclient();
drawmenu();
}
void
setcolumns(const Arg *arg)
{
columns += arg->i;
if (columns < 0) columns = 0;
match();
resizeclient();
drawmenu();
}

View file

@ -29,3 +29,5 @@ static void rotateimg(const Arg *arg);
static void flipimg(const Arg *arg);
static void setimgpos(const Arg *arg);
static void setimggaps(const Arg *arg);
static void setlines(const Arg *arg);
static void setcolumns(const Arg *arg);

View file

@ -42,3 +42,24 @@ set_prop(void)
return;
}
void
resizeclient(void)
{
int omh = mh;
bh = drw->font->h + 2 + reqlineheight;
lines = MAX(lines, 0);
#if USEIMAGE
if (image)
resizetoimageheight(imageheight);
#endif
mh = (lines + 1) * bh;
if (!win || omh == mh) return;
XResizeWindow(dpy, win, mw, mh);
drw_resize(drw, mw, mh);
}

View file

@ -2,3 +2,4 @@ static void create_window(int x, int y, int w, int h);
static void prepare_window_size(void);
static void set_window(void);
static void set_prop(void);
static void resizeclient(void);

View file

@ -235,13 +235,15 @@ drawmenu(void)
}
#endif
for (item = curr; item != next; item = item->right, i++)
for (item = curr; item != next; item = item->right, i++) {
drawitem(
item,
x + ((i / lines) * ((mw - x) / columns)) - xpad,
y + (((i % lines) + 1) * bh),
(mw - x) / columns
);
}
} else if (matches) {
/* draw horizontal list */
x += inputw;

View file

@ -130,6 +130,7 @@ match(void)
appenditem(item, &lsubstr, &substrend);
}
}
if (lhpprefix) {
if (matches) {
matchend->right = lhpprefix;

View file

@ -199,7 +199,6 @@ static void calcoffsets(void);
static void readstdin(void);
static void recalculatenumbers(void);
static void usage(void);
static void match(void);
static void movewordedge(int dir);
static void insert(const char *str, ssize_t n);
static void cleanup(void);
@ -225,8 +224,6 @@ static char *(*fstrstr)(const char *, const char *) = cistrstr;
#include "libs/img.c"
#include "libs/rtl.h"
#include "libs/rtl.c"
#include "libs/match.h"
#include "libs/match.c"
#include "libs/event.h"
#include "libs/event.c"
#include "libs/key.c"
@ -234,13 +231,15 @@ static char *(*fstrstr)(const char *, const char *) = cistrstr;
#include "libs/sort.c"
#include "libs/draw.c"
#include "libs/schemes.c"
#include "libs/arg.c"
#include "libs/argv.h"
#include "libs/argv.c"
#include "libs/xrdb.c"
#include "libs/mode.c"
#include "libs/client.h"
#include "libs/client.c"
#include "libs/match.h"
#include "libs/match.c"
#include "libs/arg.c"
void
appenditem(struct item *item, struct item **list, struct item **last)
@ -683,7 +682,7 @@ setup(void)
reqlineheight = clineheight;
}
/* calculate menu geometry */
// resize client
bh = drw->font->h + 2 + reqlineheight;
lines = MAX(lines, 0);
reallines = lines;