From 644a15bb2d7fe185c53afd5de05a3e197adefe6d Mon Sep 17 00:00:00 2001 From: phillbush Date: Fri, 31 Jul 2020 11:01:53 -0300 Subject: [PATCH] Adding the -f option --- xmenu.1 | 9 ++++++++- xmenu.c | 16 +++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/xmenu.1 b/xmenu.1 index 1e602df..e897cad 100644 --- a/xmenu.1 +++ b/xmenu.1 @@ -3,7 +3,7 @@ xmenu \- menu utility for X .SH SYNOPSIS .B xmenu -.RB [ \-iw ] +.RB [ \-fiw ] .RB [ -p .IR position ] .RI [ title ] @@ -16,6 +16,13 @@ and outputs the item selected to stdout. .PP The options are as follows: .TP +.B -f +Make glyphs align based solely on the first font specified. +Without this option, glyphs are aligned based on the font in which they are found. +This option may correct alignment of CJK glyphs +if a CJK font is specified after a Latin font, +but may break the alignment of other glyphs in some cases. +.TP .B -i Disable icons. This makes xmenu loading faster when not using icons. diff --git a/xmenu.c b/xmenu.c index c5a0795..68c8360 100644 --- a/xmenu.c +++ b/xmenu.c @@ -95,6 +95,7 @@ static Atom wmdelete; static Atom netatom[NetLast]; /* flags */ +static int fflag = 0; /* whether glyphs should align based on the first font */ static int iflag = 0; /* whether to disable icons */ static int mflag = 0; /* whether the user specified a monitor with -p */ static int pflag = 0; /* whether the user specified a position with -p */ @@ -116,8 +117,11 @@ main(int argc, char *argv[]) XClassHint classh; int ch; - while ((ch = getopt(argc, argv, "ip:w")) != -1) { + while ((ch = getopt(argc, argv, "fip:w")) != -1) { switch (ch) { + case 'f': + fflag = 1; + break; case 'i': iflag = 1; break; @@ -642,6 +646,9 @@ drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *t FcChar32 ucode; XftFont *currfont; int textlen = 0; + int texty; + + texty = y + (h - (dc.fonts[0]->ascent + dc.fonts[0]->descent))/2 + dc.fonts[0]->ascent; s = text; while (*s) { @@ -667,9 +674,8 @@ drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *t textlen += ext.xOff; if (draw) { - int texty; - - texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent; + if (!fflag) + texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent; XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)s, len); x += ext.xOff; @@ -1272,6 +1278,6 @@ cleanup(void) static void usage(void) { - (void)fprintf(stderr, "usage: xmenu [-iw] [-p position] [title]\n"); + (void)fprintf(stderr, "usage: xmenu [-fiw] [-p position] [title]\n"); exit(1); }