tabbed

Mahdi's build of tabbed
git clone git://mahdi.pw/tabbed.git
Log | Files | Refs | README | LICENSE

commit b960a22ace4115017013098036ed6f79bbf1d172
parent a5a2d7c6c9bf4043fb55b77aa1a4515648b5f03c
Author: Mahdi Mirzade <me@mahdi.pw>
Date:   Sun, 22 May 2022 19:33:59 +0430

Better implementation of hidetabs and keyrelease, other small changes

Diffstat:
Mconfig.h | 72++++++++++++++++++++++++++++++++++++++++--------------------------------
Mtabbed.c | 46+++++++++++++++++++++++++++++-----------------
2 files changed, 69 insertions(+), 49 deletions(-)

diff --git a/config.h b/config.h @@ -1,6 +1,8 @@ /* See LICENSE file for copyright and license details. */ /* appearance */ +#define HIDETABS 0 + static const char* font = "monospace:size=9"; static const char* normbgcolor = "#222222"; static const char* normfgcolor = "#cccccc"; @@ -8,15 +10,15 @@ static const char* selbgcolor = "#555555"; static const char* selfgcolor = "#ffffff"; static const char* urgbgcolor = "#111111"; static const char* urgfgcolor = "#cc0000"; -static const char before[] = "<"; -static const char after[] = ">"; +static const char before[] = ""; +static const char after[] = ""; static const char titletrim[] = "..."; static const int tabwidth = 150; static const Bool foreground = True; static Bool urgentswitch = False; -static const int clientNumber = 1; -static const int barHeight = 0; +static const int clientNumber = 0; +static const int barHeight = 20; /* * Where to place a new tab when it is opened. When npisrelative is True, @@ -38,42 +40,48 @@ static Bool npisrelative = True; #define MODKEY ControlMask static Key keys[] = { - /* modifier key function argument */ - { MODKEY|Mod1Mask, XK_Return, focusonce, { 0 } }, - { MODKEY|Mod1Mask, XK_Return, spawn, { 0 } }, + /* modifier key function argument */ + { MODKEY|Mod1Mask, XK_Return, focusonce, { 0 } }, + { MODKEY|Mod1Mask, XK_Return, spawn, { 0 } }, - { MODKEY|Mod1Mask, XK_l, rotate, { .i = +1 } }, - { MODKEY|Mod1Mask, XK_h, rotate, { .i = -1 } }, - { MODKEY|Mod1Mask, XK_j, movetab, { .i = -1 } }, - { MODKEY|Mod1Mask, XK_k, movetab, { .i = +1 } }, - { MODKEY, XK_Tab, rotate, { .i = 0 } }, + { MODKEY|Mod1Mask, XK_l, rotate, { .i = +1 } }, + { MODKEY|Mod1Mask, XK_h, rotate, { .i = -1 } }, + { MODKEY|Mod1Mask, XK_j, movetab, { .i = -1 } }, + { MODKEY|Mod1Mask, XK_k, movetab, { .i = +1 } }, + { MODKEY, XK_Tab, rotate, { .i = 0 } }, - { MODKEY, XK_grave, spawn, SETPROP("_TABBED_SELECT_TAB") }, - { MODKEY, XK_1, move, { .i = 0 } }, - { MODKEY, XK_2, move, { .i = 1 } }, - { MODKEY, XK_3, move, { .i = 2 } }, - { MODKEY, XK_4, move, { .i = 3 } }, - { MODKEY, XK_5, move, { .i = 4 } }, - { MODKEY, XK_6, move, { .i = 5 } }, - { MODKEY, XK_7, move, { .i = 6 } }, - { MODKEY, XK_8, move, { .i = 7 } }, - { MODKEY, XK_9, move, { .i = 8 } }, - { MODKEY, XK_0, move, { .i = 9 } }, + { MODKEY, XK_grave, spawn, SETPROP("_TABBED_SELECT_TAB") }, + { MODKEY, XK_1, move, { .i = 0 } }, + { MODKEY, XK_2, move, { .i = 1 } }, + { MODKEY, XK_3, move, { .i = 2 } }, + { MODKEY, XK_4, move, { .i = 3 } }, + { MODKEY, XK_5, move, { .i = 4 } }, + { MODKEY, XK_6, move, { .i = 5 } }, + { MODKEY, XK_7, move, { .i = 6 } }, + { MODKEY, XK_8, move, { .i = 7 } }, + { MODKEY, XK_9, move, { .i = 8 } }, + { MODKEY, XK_0, move, { .i = 9 } }, - //{ MODKEY, XK_d, killclient, { 0 } }, - { MODKEY, XK_q, killclient, { 0 } }, + { MODKEY, XK_q, killclient, { 0 } }, - { MODKEY, XK_u, focusurgent, { 0 } }, - { MODKEY|Mod1Mask, XK_u, toggle, { .v = (void*) &urgentswitch } }, + { MODKEY, XK_u, focusurgent, { 0 } }, + { MODKEY|Mod1Mask, XK_u, toggle, { .v = (void*) &urgentswitch } }, - { 0, XK_F11, fullscreen, { 0 } }, + { 0, XK_F11, fullscreen, { 0 } }, - { MODKEY, XK_Alt_L, showbar, { .i = 1 } }, + #if HIDETABS + { MODKEY, XK_Alt_L, showbar, { .i = 1 } }, { Mod1Mask, XK_Control_L, showbar, { .i = 1 } }, + #endif }; static Key keyreleases[] = { - /* modifier key function argument */ - { MODKEY|Mod1Mask, XK_Alt_L, showbar, { .i = 0 } }, - { MODKEY|Mod1Mask, XK_Control_L, showbar, { .i = 0 } }, + /* modifier key function argument */ + #if HIDETABS + { MODKEY|Mod1Mask, XK_Alt_L, showbar, { .i = 0 } }, + { MODKEY|Mod1Mask, XK_Control_L, showbar, { .i = 0 } }, + #else + { MODKEY|Mod1Mask, XK_Control_L, NULL, { 0 } }, + #endif }; + diff --git a/tabbed.c b/tabbed.c @@ -185,7 +185,11 @@ static char winid[64]; static char **cmd; static char *wmname = "tabbed"; static const char *geometry; +#if HIDETABS static Bool barvisibility = False; +#else +static Bool barvisibility = True; +#endif static Colormap cmap; static Visual *visual = NULL; @@ -349,7 +353,11 @@ drawbar(void) char *name = NULL; char tabtitle[256]; - nbh = barvisibility ? vbh : 0; + #if HIDETABS + nbh = barvisibility && nclients > 1 ? vbh : 0; + #else + nbh = nclients > 1 ? vbh : 0; + #endif if (nbh != bh) { bh = nbh; for (c = 0; c < nclients; c++) @@ -400,9 +408,12 @@ drawbar(void) } else { col = clients[c]->urgent ? dc.urg : dc.norm; } - snprintf(tabtitle, sizeof(tabtitle), "%d: %s", - c + 1, clients[c]->name); - drawtext(tabtitle, col); + if (clientNumber) { + snprintf(tabtitle, sizeof(tabtitle), "%d: %s", + c + 1, clients[c]->name); + drawtext(tabtitle, col); + } else + drawtext(clients[c]->name, col); dc.x += dc.w; clients[c]->tabx = dc.x; } @@ -426,7 +437,7 @@ drawtext(const char *text, XftColor col[ColLast]) olen = strlen(text); h = dc.font.ascent + dc.font.descent; y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; - x = dc.x + (h / 2); + x = dc.x + (h / 2); /* shorten text if necessary */ for (len = MIN(olen, sizeof(buf)); @@ -439,7 +450,7 @@ drawtext(const char *text, XftColor col[ColLast]) if (len < olen) { for (i = len, j = strlen(titletrim); j && i; buf[--i] = titletrim[--j]) - ; + ; } d = XftDrawCreate(dpy, dc.drawable, visual, cmap); @@ -1098,13 +1109,13 @@ setup(void) XRenderPictFormat *fmt; int nvi; int i; - + XVisualInfo tpl = { .screen = screen, .depth = 32, .class = TrueColor }; - + vis = XGetVisualInfo(dpy, VisualScreenMask | VisualDepthMask | VisualClassMask, &tpl, &nvi); for(i = 0; i < nvi; i ++) { fmt = XRenderFindVisualFormat(dpy, vis[i].visual); @@ -1113,14 +1124,14 @@ setup(void) break; } } - + XFree(vis); - + if (! visual) { fprintf(stderr, "Couldn't find ARGB visual.\n"); exit(1); } - + cmap = XCreateColormap( dpy, root, visual, None); dc.norm[ColBG] = getcolor(normbgcolor); dc.norm[ColFG] = getcolor(normfgcolor); @@ -1137,16 +1148,16 @@ setup(void) | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; attrs.background_pixmap = None ; attrs.colormap = cmap; - + win = XCreateWindow(dpy, root, wx, wy, ww, wh, 0, 32, InputOutput, visual, CWBackPixmap | CWBorderPixel | CWBitGravity | CWEventMask | CWColormap, &attrs); - + dc.drawable = XCreatePixmap(dpy, win, ww, wh, 32); dc.gc = XCreateGC(dpy, dc.drawable, 0, 0); - + XMapRaised(dpy, win); XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask | ButtonPressMask | ExposureMask | KeyPressMask | @@ -1405,13 +1416,13 @@ xrdb_load(void) xrdb = XrmGetStringDatabase(xrm); XRESOURCE_LOAD_STRING("color8", normbgcolor); - XRESOURCE_LOAD_STRING("color7", normfgcolor); + XRESOURCE_LOAD_STRING("color15", normfgcolor); XRESOURCE_LOAD_STRING("color0", selbgcolor); - XRESOURCE_LOAD_STRING("color15", selfgcolor); + XRESOURCE_LOAD_STRING("color7", selfgcolor); XRESOURCE_LOAD_STRING("color8", urgbgcolor); - XRESOURCE_LOAD_STRING("color6", urgfgcolor); + XRESOURCE_LOAD_STRING("color5", urgfgcolor); XRESOURCE_LOAD_STRING("font", font); } @@ -1540,3 +1551,4 @@ main(int argc, char *argv[]) return EXIT_SUCCESS; } +