Add multiple color schemes and key bindings to change them
This commits adds these color schemes: - the default (dark) st color scheme - the default (dark) alacritty color scheme - One Half (dark & light) - Solarized (dark & light) - Gruvbox (dark & light) Select one with Alt+1..8. Select the next one with Alt+0. Select the previous one with Ctrl+Alt+0.
This commit is contained in:
52
x.c
52
x.c
@ -59,6 +59,8 @@ static void zoom(const Arg *);
|
||||
static void zoomabs(const Arg *);
|
||||
static void zoomreset(const Arg *);
|
||||
static void ttysend(const Arg *);
|
||||
static void nextscheme(const Arg *);
|
||||
static void selectscheme(const Arg *);
|
||||
|
||||
/* config.h for applying patches and the configuration. */
|
||||
#include "config.h"
|
||||
@ -185,6 +187,7 @@ static void mousesel(XEvent *, int);
|
||||
static void mousereport(XEvent *);
|
||||
static char *kmap(KeySym, uint);
|
||||
static int match(uint, uint);
|
||||
static void updatescheme(void);
|
||||
|
||||
static void run(void);
|
||||
static void usage(void);
|
||||
@ -801,7 +804,7 @@ xloadcols(void)
|
||||
for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp)
|
||||
XftColorFree(xw.dpy, xw.vis, xw.cmap, cp);
|
||||
} else {
|
||||
dc.collen = MAX(LEN(colorname), 256);
|
||||
dc.collen = 258;
|
||||
dc.col = xmalloc(dc.collen * sizeof(Color));
|
||||
}
|
||||
|
||||
@ -2027,6 +2030,47 @@ usage(void)
|
||||
" [stty_args ...]\n", argv0, argv0);
|
||||
}
|
||||
|
||||
void
|
||||
nextscheme(const Arg *arg)
|
||||
{
|
||||
colorscheme += arg->i;
|
||||
if (colorscheme >= (int)LEN(schemes))
|
||||
colorscheme = 0;
|
||||
else if (colorscheme < 0)
|
||||
colorscheme = LEN(schemes) - 1;
|
||||
updatescheme();
|
||||
}
|
||||
|
||||
void
|
||||
selectscheme(const Arg *arg)
|
||||
{
|
||||
if (BETWEEN(arg->i, 0, LEN(schemes)-1)) {
|
||||
colorscheme = arg->i;
|
||||
updatescheme();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
updatescheme(void)
|
||||
{
|
||||
int oldbg, oldfg;
|
||||
|
||||
oldbg = defaultbg;
|
||||
oldfg = defaultfg;
|
||||
colorname = schemes[colorscheme].colors;
|
||||
defaultbg = schemes[colorscheme].bg;
|
||||
defaultfg = schemes[colorscheme].fg;
|
||||
defaultcs = schemes[colorscheme].cs;
|
||||
defaultrcs = schemes[colorscheme].rcs;
|
||||
xloadcols();
|
||||
if (defaultbg != oldbg)
|
||||
tupdatebgcolor(oldbg, defaultbg);
|
||||
if (defaultfg != oldfg)
|
||||
tupdatefgcolor(oldfg, defaultfg);
|
||||
cresize(win.w, win.h);
|
||||
redraw();
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
@ -2079,6 +2123,12 @@ main(int argc, char *argv[])
|
||||
} ARGEND;
|
||||
|
||||
run:
|
||||
colorname = schemes[colorscheme].colors;
|
||||
defaultbg = schemes[colorscheme].bg;
|
||||
defaultfg = schemes[colorscheme].fg;
|
||||
defaultcs = schemes[colorscheme].cs;
|
||||
defaultrcs = schemes[colorscheme].rcs;
|
||||
|
||||
if (argc > 0) /* eat all remaining arguments */
|
||||
opt_cmd = argv;
|
||||
|
||||
|
Reference in New Issue
Block a user