add pango markup toggles

This commit is contained in:
speedie 2023-02-28 15:51:32 +01:00
parent 6df3bc9112
commit 3f7bc43bf4
6 changed files with 171 additions and 137 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
*.out
*.o
spmenu
*zst*

View file

@ -67,3 +67,11 @@ spmenu.generatecache: 0
spmenu.mode: 0
spmenu.normtext: Normal
spmenu.instext: Insert
spmenu.pango_item: 1
spmenu.pango_prompt: 1
spmenu.pango_input: 1
spmenu.pango_leftarrow: 1
spmenu.pango_rightarrow: 1
spmenu.pango_numbers: 1
spmenu.pango_mode: 1
spmenu.pango_password: 1

View file

@ -130,6 +130,15 @@ static char col_sgrcolor13[] = "#ff00ff"; /* SGR color #13 */
static char col_sgrcolor14[] = "#00ffff"; /* SGR color #14 */
static char col_sgrcolor15[] = "#ffffff"; /* SGR color #15 */
static int pango_item = 1; /* Enable support for pango markup for the items */
static int pango_prompt = 1; /* Enable support for pango markup for the prompt */
static int pango_input = 1; /* Enable support for pango markup for user input */
static int pango_leftarrow = 1; /* Enable support for pango markup for the left arrow */
static int pango_rightarrow = 1; /* Enable support for pango markup for the right arrow */
static int pango_numbers = 1; /* Enable support for pango markup for the match count */
static int pango_mode = 1; /* Enable support for pango markup for the mode indicator */
static int pango_password = 1; /* Enable support for pango markup for the password text */
/* Alpha options */
#define fgalpha opaque /* Foreground alpha */
#define bgalpha 200 /* Background alpha */

View file

@ -5,5 +5,5 @@
VERSION = 0.2
# includes and libs
INCS = -I$(X11INC) -I$(FREETYPEINC) `pkg-config --cflags xft pango pangoxft`
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) $(XRENDERLIBS) $(IMLIB2LIBS) -lm `pkg-config --libs xft pango pangoxft`
INCS = -I$(X11INC) -I$(FREETYPEINC) $(BDINC) `pkg-config --cflags xft pango pangoxft`
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) $(XRENDERLIBS) $(IMLIB2LIBS) $(BDLIBS) -lm `pkg-config --libs xft pango pangoxft`

View file

@ -9,22 +9,30 @@
#include <time.h>
#include <unistd.h>
#ifdef FRIBIDI
#define USERTL 1
#else
/* check if we should enable right to left language support */
#ifdef NORTL
#define USERTL 0
#else
#define USERTL 1
#endif
#if USERTL
#include <fribidi.h>
#endif
/* check if we should enable image support */
#ifdef NOIMAGE
#define USEIMAGE 0
#else
#define USEIMAGE 1
#endif
#ifdef XINERAMA
#define USEXINERAMA 1
#else
#define USEXINERAMA 0
#endif
#if USERTL
#include <fribidi.h>
#endif
#if USEIMAGE
#include <errno.h>
#include <pwd.h>
@ -32,7 +40,7 @@
#include <openssl/md5.h>
#endif
#ifdef XINERAMA
#if USEXINERAMA
#include <X11/extensions/Xinerama.h>
#endif
@ -345,9 +353,9 @@ drawitem(struct item *item, int x, int y, int w)
rw = TEXTWM(buffer) - lrpad;
#if USERTL
apply_fribidi(buffer);
drw_text(drw, x, y, rw + lp, bh, lp, fribidi_text, 0, True);
drw_text(drw, x, y, rw + lp, bh, lp, fribidi_text, 0, pango_item ? True : False);
#else
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, True);
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, pango_item ? True : False);
#endif
x += rw + lp;
@ -395,9 +403,9 @@ drawitem(struct item *item, int x, int y, int w)
/* draw any text that doesn't use sgr sequences */
#if USERTL
apply_fribidi(buffer);
int r = drw_text(drw, x, y, w - rw, bh, lp, fribidi_text, 0, True);
int r = drw_text(drw, x, y, w - rw, bh, lp, fribidi_text, 0, pango_item ? True : False);
#else
int r = drw_text(drw, x, y, w - rw, bh, lp, buffer, 0, True);
int r = drw_text(drw, x, y, w - rw, bh, lp, buffer, 0, pango_item ? True : False);
#endif
if (!hidehighlight && !ib) drawhighlights(item, x, y, w - rw);
@ -429,27 +437,27 @@ drawmenu(void)
drw_setscheme(drw, scheme[SchemePrompt]);
}
x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0, True);
x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0, pango_prompt ? True : False);
}
/* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw;
drw_setscheme(drw, scheme[SchemeInput]);
if (passwd) {
censort = ecalloc(1, sizeof(text));
censort = ecalloc(1, sizeof(text));
memset(censort, '.', strlen(text));
#if USERTL
apply_fribidi(censort);
drw_text(drw, x, 0, w, bh, lrpad / 2, fribidi_text, 0, True);
drw_text(drw, x, 0, w, bh, lrpad / 2, fribidi_text, 0, pango_password ? True : False);
#else
drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0, True);
drw_text(drw, x, 0, w - LENGTH(censort), bh, lrpad / 2, censort, 0, pango_password ? True : False);
#endif
free(censort);
free(censort);
} else {
#if USERTL
apply_fribidi(text);
drw_text(drw, x, 0, w, bh, lrpad / 2, fribidi_text, 0, True);
drw_text(drw, x, 0, w, bh, lrpad / 2, fribidi_text, 0, pango_input ? True : False);
#else
drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0, True);
drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0, pango_input ? True : False);
#endif
}
@ -482,7 +490,7 @@ drawmenu(void)
w = TEXTW(leftarrow);
if (curr->left) {
drw_setscheme(drw, scheme[SchemeLArrow]);
drw_text(drw, x, 0, w, bh, lrpad / 2, leftarrow, 0, True);
drw_text(drw, x, 0, w, bh, lrpad / 2, leftarrow, 0, pango_leftarrow ? True : False);
}
x += w;
for (item = curr; item != next; item = item->right)
@ -496,21 +504,21 @@ drawmenu(void)
drw_setscheme(drw, scheme[SchemeRArrow]);
if (hidematchcount) {
drw_text(drw, mw - w - TEXTW(modetext), 0, w, bh, lrpad / 2, rightarrow, 0, True);
drw_text(drw, mw - w - TEXTW(modetext), 0, w, bh, lrpad / 2, rightarrow, 0, pango_rightarrow ? True : False);
} else {
drw_text(drw, mw - w - TEXTW(numbers) - TEXTW(modetext), 0, w, bh, lrpad / 2, rightarrow, 0, True);
drw_text(drw, mw - w - TEXTW(numbers) - TEXTW(modetext), 0, w, bh, lrpad / 2, rightarrow, 0, pango_rightarrow ? True : False);
}
}
}
if (!hidematchcount) {
drw_setscheme(drw, scheme[SchemeNumber]);
drw_text(drw, mw - TEXTW(numbers) - TEXTW(modetext), 0, TEXTW(numbers), bh, lrpad / 2, numbers, 0, False);
drw_text(drw, mw - TEXTW(numbers) - TEXTW(modetext), 0, TEXTW(numbers), bh, lrpad / 2, numbers, 0, pango_numbers ? True : False);
}
if (!hidemode) {
drw_setscheme(drw, scheme[SchemeMode]);
drw_text(drw, mw - TEXTW(modetext), 0, TEXTW(modetext), bh, lrpad / 2, modetext, 0, False);
drw_text(drw, mw - TEXTW(modetext), 0, TEXTW(modetext), bh, lrpad / 2, modetext, 0, pango_mode ? True : False);
}
drw_map(drw, win, 0, 0, mw, mh);
@ -1533,7 +1541,7 @@ setup(void)
Window w, dw, *dws;
XWindowAttributes wa;
XClassHint ch = { class, class };
#ifdef XINERAMA
#if USEXINERAMA
XineramaScreenInfo *info;
Window pw;
int a, di, n, area = 0;
@ -1620,7 +1628,7 @@ setup(void)
}
}
}
#ifdef XINERAMA
#if USEXINERAMA
i = 0;
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
XGetInputFocus(dpy, &w, &di);

View file

@ -3,121 +3,129 @@
*/
ResourcePref resources[] = {
{ "font", STRING, &font },
{ "col_caretfgcolor", STRING, &col_caretfgcolor },
{ "col_larrowfg", STRING, &col_larrowfg },
{ "col_rarrowfg", STRING, &col_rarrowfg },
{ "col_larrowbg", STRING, &col_larrowbg },
{ "col_rarrowbg", STRING, &col_rarrowbg },
{ "col_itemnormfg", STRING, &col_itemnormfg },
{ "col_itemnormbg", STRING, &col_itemnormbg },
{ "col_itemselfg", STRING, &col_itemselfg },
{ "col_itemselbg", STRING, &col_itemselbg },
{ "col_inputbg", STRING, &col_inputbg },
{ "col_inputfg", STRING, &col_inputfg },
{ "col_menubgcolor", STRING, &col_menubgcolor },
{ "col_numfgcolor", STRING, &col_numfgcolor },
{ "col_numbgcolor", STRING, &col_numbgcolor },
{ "col_modefgcolor", STRING, &col_modefgcolor },
{ "col_modebgcolor", STRING, &col_modebgcolor },
{ "col_normhlfgcolor", STRING, &col_normhlfgcolor },
{ "col_normhlbgcolor", STRING, &col_normhlbgcolor },
{ "col_selhlfgcolor", STRING, &col_selhlfgcolor },
{ "col_selhlbgcolor", STRING, &col_selhlbgcolor },
{ "col_bordercolor", STRING, &col_bordercolor },
{ "col_promptfg", STRING, &col_promptfg },
{ "col_promptbg", STRING, &col_promptbg },
{ "font", STRING, &font },
{ "col_caretfgcolor", STRING, &col_caretfgcolor },
{ "col_larrowfg", STRING, &col_larrowfg },
{ "col_rarrowfg", STRING, &col_rarrowfg },
{ "col_larrowbg", STRING, &col_larrowbg },
{ "col_rarrowbg", STRING, &col_rarrowbg },
{ "col_itemnormfg", STRING, &col_itemnormfg },
{ "col_itemnormbg", STRING, &col_itemnormbg },
{ "col_itemselfg", STRING, &col_itemselfg },
{ "col_itemselbg", STRING, &col_itemselbg },
{ "col_inputbg", STRING, &col_inputbg },
{ "col_inputfg", STRING, &col_inputfg },
{ "col_menubgcolor", STRING, &col_menubgcolor },
{ "col_numfgcolor", STRING, &col_numfgcolor },
{ "col_numbgcolor", STRING, &col_numbgcolor },
{ "col_modefgcolor", STRING, &col_modefgcolor },
{ "col_modebgcolor", STRING, &col_modebgcolor },
{ "col_normhlfgcolor", STRING, &col_normhlfgcolor },
{ "col_normhlbgcolor", STRING, &col_normhlbgcolor },
{ "col_selhlfgcolor", STRING, &col_selhlfgcolor },
{ "col_selhlbgcolor", STRING, &col_selhlbgcolor },
{ "col_bordercolor", STRING, &col_bordercolor },
{ "col_promptfg", STRING, &col_promptfg },
{ "col_promptbg", STRING, &col_promptbg },
/* Pywal support */
{ "color10", STRING, &col_caretfgcolor },
{ "color4", STRING, &col_larrowfg },
{ "color4", STRING, &col_rarrowfg },
{ "color10", STRING, &col_itemnormfg },
{ "color10", STRING, &col_inputfg },
{ "color0", STRING, &col_itemnormbg },
{ "color0", STRING, &col_menubgcolor },
{ "color0", STRING, &col_larrowbg },
{ "color0", STRING, &col_rarrowbg },
{ "color0", STRING, &col_itemselfg },
{ "color0", STRING, &col_inputbg },
{ "color12", STRING, &col_promptbg },
{ "color0", STRING, &col_promptfg },
{ "color6", STRING, &col_itemselbg },
{ "color6", STRING, &col_bordercolor },
{ "color0", STRING, &col_numfgcolor },
{ "color5", STRING, &col_numbgcolor },
{ "color0", STRING, &col_modefgcolor },
{ "color7", STRING, &col_modebgcolor },
{ "color2", STRING, &col_normhlbgcolor },
{ "color3", STRING, &col_selhlbgcolor },
{ "color0", STRING, &col_normhlfgcolor },
{ "color0", STRING, &col_selhlfgcolor },
{ "color10", STRING, &col_caretfgcolor },
{ "color4", STRING, &col_larrowfg },
{ "color4", STRING, &col_rarrowfg },
{ "color10", STRING, &col_itemnormfg },
{ "color10", STRING, &col_inputfg },
{ "color0", STRING, &col_itemnormbg },
{ "color0", STRING, &col_menubgcolor },
{ "color0", STRING, &col_larrowbg },
{ "color0", STRING, &col_rarrowbg },
{ "color0", STRING, &col_itemselfg },
{ "color0", STRING, &col_inputbg },
{ "color12", STRING, &col_promptbg },
{ "color0", STRING, &col_promptfg },
{ "color6", STRING, &col_itemselbg },
{ "color6", STRING, &col_bordercolor },
{ "color0", STRING, &col_numfgcolor },
{ "color5", STRING, &col_numbgcolor },
{ "color0", STRING, &col_modefgcolor },
{ "color7", STRING, &col_modebgcolor },
{ "color2", STRING, &col_normhlbgcolor },
{ "color3", STRING, &col_selhlbgcolor },
{ "color0", STRING, &col_normhlfgcolor },
{ "color0", STRING, &col_selhlfgcolor },
/* sgr colors */
{ "col_sgrcolor0", STRING, &col_sgrcolor0 },
{ "col_sgrcolor1", STRING, &col_sgrcolor1 },
{ "col_sgrcolor2", STRING, &col_sgrcolor2 },
{ "col_sgrcolor3", STRING, &col_sgrcolor3 },
{ "col_sgrcolor4", STRING, &col_sgrcolor4 },
{ "col_sgrcolor5", STRING, &col_sgrcolor5 },
{ "col_sgrcolor6", STRING, &col_sgrcolor6 },
{ "col_sgrcolor7", STRING, &col_sgrcolor7 },
{ "col_sgrcolor8", STRING, &col_sgrcolor8 },
{ "col_sgrcolor9", STRING, &col_sgrcolor9 },
{ "col_sgrcolor10", STRING, &col_sgrcolor10 },
{ "col_sgrcolor11", STRING, &col_sgrcolor11 },
{ "col_sgrcolor12", STRING, &col_sgrcolor12 },
{ "col_sgrcolor13", STRING, &col_sgrcolor13 },
{ "col_sgrcolor14", STRING, &col_sgrcolor14 },
{ "col_sgrcolor15", STRING, &col_sgrcolor15 },
{ "col_sgrcolor0", STRING, &col_sgrcolor0 },
{ "col_sgrcolor1", STRING, &col_sgrcolor1 },
{ "col_sgrcolor2", STRING, &col_sgrcolor2 },
{ "col_sgrcolor3", STRING, &col_sgrcolor3 },
{ "col_sgrcolor4", STRING, &col_sgrcolor4 },
{ "col_sgrcolor5", STRING, &col_sgrcolor5 },
{ "col_sgrcolor6", STRING, &col_sgrcolor6 },
{ "col_sgrcolor7", STRING, &col_sgrcolor7 },
{ "col_sgrcolor8", STRING, &col_sgrcolor8 },
{ "col_sgrcolor9", STRING, &col_sgrcolor9 },
{ "col_sgrcolor10", STRING, &col_sgrcolor10 },
{ "col_sgrcolor11", STRING, &col_sgrcolor11 },
{ "col_sgrcolor12", STRING, &col_sgrcolor12 },
{ "col_sgrcolor13", STRING, &col_sgrcolor13 },
{ "col_sgrcolor14", STRING, &col_sgrcolor14 },
{ "col_sgrcolor15", STRING, &col_sgrcolor15 },
/* sgr colors */
{ "color0", STRING, &col_sgrcolor0 },
{ "color1", STRING, &col_sgrcolor1 },
{ "color2", STRING, &col_sgrcolor2 },
{ "color3", STRING, &col_sgrcolor3 },
{ "color4", STRING, &col_sgrcolor4 },
{ "color5", STRING, &col_sgrcolor5 },
{ "color6", STRING, &col_sgrcolor6 },
{ "color7", STRING, &col_sgrcolor7 },
{ "color8", STRING, &col_sgrcolor8 },
{ "color9", STRING, &col_sgrcolor9 },
{ "color10", STRING, &col_sgrcolor10 },
{ "color11", STRING, &col_sgrcolor11 },
{ "color12", STRING, &col_sgrcolor12 },
{ "color13", STRING, &col_sgrcolor13 },
{ "color14", STRING, &col_sgrcolor14 },
{ "color15", STRING, &col_sgrcolor15 },
{ "color0", STRING, &col_sgrcolor0 },
{ "color1", STRING, &col_sgrcolor1 },
{ "color2", STRING, &col_sgrcolor2 },
{ "color3", STRING, &col_sgrcolor3 },
{ "color4", STRING, &col_sgrcolor4 },
{ "color5", STRING, &col_sgrcolor5 },
{ "color6", STRING, &col_sgrcolor6 },
{ "color7", STRING, &col_sgrcolor7 },
{ "color8", STRING, &col_sgrcolor8 },
{ "color9", STRING, &col_sgrcolor9 },
{ "color10", STRING, &col_sgrcolor10 },
{ "color11", STRING, &col_sgrcolor11 },
{ "color12", STRING, &col_sgrcolor12 },
{ "color13", STRING, &col_sgrcolor13 },
{ "color14", STRING, &col_sgrcolor14 },
{ "color15", STRING, &col_sgrcolor15 },
{ "menuposition", INTEGER, &menuposition },
{ "menupaddingv", INTEGER, &menupaddingv },
{ "menupaddingh", INTEGER, &menupaddingh },
{ "menuposition", INTEGER, &menuposition },
{ "menupaddingv", INTEGER, &menupaddingv },
{ "menupaddingh", INTEGER, &menupaddingh },
{ "accuratewidth", INTEGER, &accuratewidth },
{ "alpha", INTEGER, &alpha },
{ "type", INTEGER, &type },
{ "preselected", INTEGER, &preselected },
{ "colorprompt", INTEGER, &colorprompt },
{ "prompt", STRING, &prompt },
{ "class", STRING, &class },
{ "leftarrow", STRING, &leftarrow },
{ "rightarrow", STRING, &rightarrow },
{ "normtext", STRING, &normtext },
{ "instext", STRING, &instext },
{ "bordercentered", INTEGER, &bordercentered },
{ "borderwidth", INTEGER, &borderwidth },
{ "lines", INTEGER, &lines },
{ "lineheight", INTEGER, &lineheight },
{ "columns", INTEGER, &columns },
{ "maxhist", INTEGER, &maxhist },
{ "hidematchcount", INTEGER, &hidematchcount },
{ "hidehighlight", INTEGER, &hidehighlight },
{ "hidemode", INTEGER, &hidemode },
{ "histnodup", INTEGER, &histnodup },
{ "casesensitive", INTEGER, &casesensitive },
{ "imagesize", INTEGER, &imagesize },
{ "imagegaps", INTEGER, &imagegaps },
{ "imageposition", INTEGER, &imageposition },
{ "generatecache", INTEGER, &generatecache },
{ "mode", INTEGER, &mode },
{ "accuratewidth", INTEGER, &accuratewidth },
{ "alpha", INTEGER, &alpha },
{ "type", INTEGER, &type },
{ "preselected", INTEGER, &preselected },
{ "colorprompt", INTEGER, &colorprompt },
{ "prompt", STRING, &prompt },
{ "class", STRING, &class },
{ "leftarrow", STRING, &leftarrow },
{ "rightarrow", STRING, &rightarrow },
{ "normtext", STRING, &normtext },
{ "instext", STRING, &instext },
{ "bordercentered", INTEGER, &bordercentered },
{ "borderwidth", INTEGER, &borderwidth },
{ "lines", INTEGER, &lines },
{ "lineheight", INTEGER, &lineheight },
{ "columns", INTEGER, &columns },
{ "maxhist", INTEGER, &maxhist },
{ "hidematchcount", INTEGER, &hidematchcount },
{ "hidehighlight", INTEGER, &hidehighlight },
{ "hidemode", INTEGER, &hidemode },
{ "histnodup", INTEGER, &histnodup },
{ "casesensitive", INTEGER, &casesensitive },
{ "imagesize", INTEGER, &imagesize },
{ "imagegaps", INTEGER, &imagegaps },
{ "imageposition", INTEGER, &imageposition },
{ "generatecache", INTEGER, &generatecache },
{ "mode", INTEGER, &mode },
{ "pango_item", INTEGER, &pango_item },
{ "pango_prompt", INTEGER, &pango_prompt },
{ "pango_input", INTEGER, &pango_input },
{ "pango_leftarrow", INTEGER, &pango_leftarrow },
{ "pango_rightarrow", INTEGER, &pango_rightarrow },
{ "pango_numbers", INTEGER, &pango_numbers },
{ "pango_mode", INTEGER, &pango_mode },
{ "pango_password", INTEGER, &pango_password },
};