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 *.out
*.o *.o
spmenu spmenu
*zst*

View file

@ -67,3 +67,11 @@ spmenu.generatecache: 0
spmenu.mode: 0 spmenu.mode: 0
spmenu.normtext: Normal spmenu.normtext: Normal
spmenu.instext: Insert 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_sgrcolor14[] = "#00ffff"; /* SGR color #14 */
static char col_sgrcolor15[] = "#ffffff"; /* SGR color #15 */ 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 */ /* Alpha options */
#define fgalpha opaque /* Foreground alpha */ #define fgalpha opaque /* Foreground alpha */
#define bgalpha 200 /* Background alpha */ #define bgalpha 200 /* Background alpha */

View file

@ -5,5 +5,5 @@
VERSION = 0.2 VERSION = 0.2
# includes and libs # includes and libs
INCS = -I$(X11INC) -I$(FREETYPEINC) `pkg-config --cflags xft pango pangoxft` INCS = -I$(X11INC) -I$(FREETYPEINC) $(BDINC) `pkg-config --cflags xft pango pangoxft`
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) $(XRENDERLIBS) $(IMLIB2LIBS) -lm `pkg-config --libs 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 <time.h>
#include <unistd.h> #include <unistd.h>
#ifdef FRIBIDI /* check if we should enable right to left language support */
#define USERTL 1 #ifdef NORTL
#else
#define USERTL 0 #define USERTL 0
#else
#define USERTL 1
#endif #endif
#if USERTL /* check if we should enable image support */
#include <fribidi.h>
#endif
#ifdef NOIMAGE #ifdef NOIMAGE
#define USEIMAGE 0 #define USEIMAGE 0
#else #else
#define USEIMAGE 1 #define USEIMAGE 1
#endif #endif
#ifdef XINERAMA
#define USEXINERAMA 1
#else
#define USEXINERAMA 0
#endif
#if USERTL
#include <fribidi.h>
#endif
#if USEIMAGE #if USEIMAGE
#include <errno.h> #include <errno.h>
#include <pwd.h> #include <pwd.h>
@ -32,7 +40,7 @@
#include <openssl/md5.h> #include <openssl/md5.h>
#endif #endif
#ifdef XINERAMA #if USEXINERAMA
#include <X11/extensions/Xinerama.h> #include <X11/extensions/Xinerama.h>
#endif #endif
@ -345,9 +353,9 @@ drawitem(struct item *item, int x, int y, int w)
rw = TEXTWM(buffer) - lrpad; rw = TEXTWM(buffer) - lrpad;
#if USERTL #if USERTL
apply_fribidi(buffer); 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 #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 #endif
x += rw + lp; 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 */ /* draw any text that doesn't use sgr sequences */
#if USERTL #if USERTL
apply_fribidi(buffer); 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 #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 #endif
if (!hidehighlight && !ib) drawhighlights(item, x, y, w - rw); if (!hidehighlight && !ib) drawhighlights(item, x, y, w - rw);
@ -429,27 +437,27 @@ drawmenu(void)
drw_setscheme(drw, scheme[SchemePrompt]); 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 */ /* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw; w = (lines > 0 || !matches) ? mw - x : inputw;
drw_setscheme(drw, scheme[SchemeInput]); drw_setscheme(drw, scheme[SchemeInput]);
if (passwd) { if (passwd) {
censort = ecalloc(1, sizeof(text)); censort = ecalloc(1, sizeof(text));
memset(censort, '.', strlen(text)); memset(censort, '.', strlen(text));
#if USERTL #if USERTL
apply_fribidi(censort); 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 #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 #endif
free(censort); free(censort);
} else { } else {
#if USERTL #if USERTL
apply_fribidi(text); 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 #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 #endif
} }
@ -482,7 +490,7 @@ drawmenu(void)
w = TEXTW(leftarrow); w = TEXTW(leftarrow);
if (curr->left) { if (curr->left) {
drw_setscheme(drw, scheme[SchemeLArrow]); 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; x += w;
for (item = curr; item != next; item = item->right) for (item = curr; item != next; item = item->right)
@ -496,21 +504,21 @@ drawmenu(void)
drw_setscheme(drw, scheme[SchemeRArrow]); drw_setscheme(drw, scheme[SchemeRArrow]);
if (hidematchcount) { 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 { } 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) { if (!hidematchcount) {
drw_setscheme(drw, scheme[SchemeNumber]); 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) { if (!hidemode) {
drw_setscheme(drw, scheme[SchemeMode]); 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); drw_map(drw, win, 0, 0, mw, mh);
@ -1533,7 +1541,7 @@ setup(void)
Window w, dw, *dws; Window w, dw, *dws;
XWindowAttributes wa; XWindowAttributes wa;
XClassHint ch = { class, class }; XClassHint ch = { class, class };
#ifdef XINERAMA #if USEXINERAMA
XineramaScreenInfo *info; XineramaScreenInfo *info;
Window pw; Window pw;
int a, di, n, area = 0; int a, di, n, area = 0;
@ -1620,7 +1628,7 @@ setup(void)
} }
} }
} }
#ifdef XINERAMA #if USEXINERAMA
i = 0; i = 0;
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) { if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
XGetInputFocus(dpy, &w, &di); XGetInputFocus(dpy, &w, &di);

View file

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