sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 40940c7ce907b3c831c127a9e54404ba9e331d26
parent a307de51f0fb74d205b7acedd5d84dc6fb0a5f52
Author: LeelaPakanati <LeelaPakanati.gmail.com>
Date:   Mon, 16 Dec 2019 19:00:36 -0500

Add pathes to handle keyrelease actions and hidetabs based on keyrelease

Diffstat:
Atools.suckless.org/tabbed/patches/hidetabs/index.md | 22++++++++++++++++++++++
Atools.suckless.org/tabbed/patches/hidetabs/tabbed-hidetabs-20191216-b5f9e6.diff | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atools.suckless.org/tabbed/patches/keyrelease/index.md | 15+++++++++++++++
Atools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191213-b5f9ec6.diff | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191216-b5f9e6.diff | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 334 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/tabbed/patches/hidetabs/index.md b/tools.suckless.org/tabbed/patches/hidetabs/index.md @@ -0,0 +1,22 @@ +Hide Tabs +===== + +Description +----------- +This patch hides all the tabs and only shows them when Mod+Shift is pressed. +All functions with switching, rotating, and creating tabs involve Mod+Shift. +When not doing one of these functions, visibility of the tabs is not needed. + +This patch relies on the keyrelease patch to support show/hide on +keypress/keyrelease. + +This patch was inspired by and borrows from the autohide patch originally +by Carlos Pita. + +Download +-------- +* [tabbed-hidetabs-20191216-b5f9ec6.diff](tabbed-hidetabs-20191216-b5f9ec6.diff) + +Author +------ +* Leela Pakanati - <leela.pakanati@gmail.com> diff --git a/tools.suckless.org/tabbed/patches/hidetabs/tabbed-hidetabs-20191216-b5f9e6.diff b/tools.suckless.org/tabbed/patches/hidetabs/tabbed-hidetabs-20191216-b5f9e6.diff @@ -0,0 +1,105 @@ +From 52708d468acace9543d01e6d8afae799f8d6fccd Mon Sep 17 00:00:00 2001 +From: LeelaPakanati <leela.pakanati@gmail.com> +Date: Mon, 16 Dec 2019 18:57:32 -0500 +Subject: [PATCH] Add hide tabs feature + +--- + config.def.h | 7 +++++-- + tabbed.c | 24 +++++++++++++++++++++--- + 2 files changed, 26 insertions(+), 5 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 7bfda30..bb7ef0e 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -63,10 +63,13 @@ static Key keys[] = { + { MODKEY|ShiftMask, XK_u, toggle, { .v = (void*) &urgentswitch } }, + + { 0, XK_F11, fullscreen, { 0 } }, ++ ++ { MODKEY, XK_Shift_L, showbar, { .i = 1 } }, ++ { ShiftMask, XK_Control_L, showbar, { .i = 1 } }, + }; + + static Key keyreleases[] = { + /* modifier key function argument */ +- { 0, XK_Shift_L, NULL, { 0 } }, +- ++ { MODKEY|ShiftMask, XK_Shift_L, showbar, { .i = 0 } }, ++ { MODKEY|ShiftMask, XK_Control_L, showbar, { .i = 0 } }, + }; +diff --git a/tabbed.c b/tabbed.c +index fe38b9d..352dab2 100644 +--- a/tabbed.c ++++ b/tabbed.c +@@ -127,6 +127,7 @@ static void sendxembed(int c, long msg, long detail, long d1, long d2); + static void setcmd(int argc, char *argv[], int); + static void setup(void); + static void sigchld(int unused); ++static void showbar(const Arg *arg); + static void spawn(const Arg *arg); + static int textnw(const char *text, unsigned int len); + static void toggle(const Arg *arg); +@@ -154,7 +155,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = { + [MapRequest] = maprequest, + [PropertyNotify] = propertynotify, + }; +-static int bh, wx, wy, ww, wh; ++static int bh, wx, wy, ww, wh, vbh; + static unsigned int numlockmask; + static Bool running = True, nextfocus, doinitspawn = True, + fillagain = False, closelastclient = False, +@@ -171,6 +172,7 @@ static char winid[64]; + static char **cmd; + static char *wmname = "tabbed"; + static const char *geometry; ++static Bool barvisibility = False; + + char *argv0; + +@@ -317,9 +319,18 @@ void + drawbar(void) + { + XftColor *col; +- int c, cc, fc, width; ++ int c, cc, fc, width, nbh; + char *name = NULL; + ++ nbh = barvisibility ? vbh : 0; ++ if (nbh != bh) { ++ bh = nbh; ++ for (c = 0; c < nclients; c++) ++ XMoveResizeWindow(dpy, clients[c]->win, 0, bh, ww, wh-bh); ++ } ++ ++ if (bh == 0) return; ++ + if (nclients == 0) { + dc.x = 0; + dc.w = ww; +@@ -1003,7 +1014,7 @@ setup(void) + screen = DefaultScreen(dpy); + root = RootWindow(dpy, screen); + initfont(font); +- bh = dc.h = dc.font.height + 2; ++ vbh = dc.h = dc.font.height + 2; + + /* init atoms */ + wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); +@@ -1096,6 +1107,13 @@ setup(void) + focus(-1); + } + ++void ++showbar(const Arg *arg) ++{ ++ barvisibility = arg->i; ++ drawbar(); ++} ++ + void + sigchld(int unused) + { +-- +2.24.0 + diff --git a/tools.suckless.org/tabbed/patches/keyrelease/index.md b/tools.suckless.org/tabbed/patches/keyrelease/index.md @@ -0,0 +1,15 @@ +Key Release +===== + +Description +----------- +This patch enables for function handling on KeyRelease events. +For example usage see: hidetabs + +Download +-------- +* [tabbed-keypress-20191213-b5f9ec6.diff](tabbed-keypress-20191213-b5f9ec6.diff) + +Author +------ +* Leela Pakanati - <leela.pakanati@gmail.com> diff --git a/tools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191213-b5f9ec6.diff b/tools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191213-b5f9ec6.diff @@ -0,0 +1,96 @@ +From 1cb625c1d9606df518d4de89d6af4bef18cdd62e Mon Sep 17 00:00:00 2001 +From: LeelaPakanati <LeelaPakanati.gmail.com> +Date: Fri, 13 Dec 2019 16:56:42 -0500 +Subject: [PATCH] Add function handling at keyrelease + +--- + config.def.h | 6 ++++++ + tabbed.c | 30 +++++++++++++++++++++++++++++- + 2 files changed, 35 insertions(+), 1 deletion(-) + +diff --git a/config.def.h b/config.def.h +index defa426..7bfda30 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -64,3 +64,9 @@ static Key keys[] = { + + { 0, XK_F11, fullscreen, { 0 } }, + }; ++ ++static Key keyreleases[] = { ++ /* modifier key function argument */ ++ { 0, XK_Shift_L, NULL, { 0 } }, ++ ++}; +diff --git a/tabbed.c b/tabbed.c +index ff3ada0..8d03bc6 100644 +--- a/tabbed.c ++++ b/tabbed.c +@@ -113,6 +113,7 @@ static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); + static void initfont(const char *fontstr); + static Bool isprotodel(int c); + static void keypress(const XEvent *e); ++static void keyrelease(const XEvent *e); + static void killclient(const Arg *arg); + static void manage(Window win); + static void maprequest(const XEvent *e); +@@ -149,6 +150,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = { + [Expose] = expose, + [FocusIn] = focusin, + [KeyPress] = keypress, ++ [KeyRelease] = keyrelease, + [MapRequest] = maprequest, + [PropertyNotify] = propertynotify, + }; +@@ -664,6 +666,22 @@ keypress(const XEvent *e) + } + } + ++void ++keyrelease(const XEvent *e) ++{ ++ const XKeyEvent *ev = &e->xkey; ++ unsigned int i; ++ KeySym keysym; ++ ++ keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); ++ for (i = 0; i < LENGTH(keys); i++) { ++ if (keysym == keyreleases[i].keysym && ++ CLEANMASK(keyreleases[i].mod) == CLEANMASK(ev->state) && ++ keyreleases[i].func) ++ keyreleases[i].func(&(keyreleases[i].arg)); ++ } ++} ++ + void + killclient(const Arg *arg) + { +@@ -714,6 +732,16 @@ manage(Window w) + } + } + ++ for (i = 0; i < LENGTH(keyreleases); i++) { ++ if ((code = XKeysymToKeycode(dpy, keyreleases[i].keysym))) { ++ for (j = 0; j < LENGTH(modifiers); j++) { ++ XGrabKey(dpy, code, keyreleases[i].mod | ++ modifiers[j], w, True, ++ GrabModeAsync, GrabModeAsync); ++ } ++ } ++ } ++ + c = ecalloc(1, sizeof *c); + c->win = w; + +@@ -1036,7 +1064,7 @@ setup(void) + XMapRaised(dpy, win); + XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask | + ButtonPressMask | ExposureMask | KeyPressMask | +- PropertyChangeMask | StructureNotifyMask | ++ KeyReleaseMask | PropertyChangeMask | StructureNotifyMask | + SubstructureRedirectMask); + xerrorxlib = XSetErrorHandler(xerror); + +-- +2.24.0 + diff --git a/tools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191216-b5f9e6.diff b/tools.suckless.org/tabbed/patches/keyrelease/tabbed-keyrelease-20191216-b5f9e6.diff @@ -0,0 +1,96 @@ +From 6c58b480b7b6ce6a28beafc60a096069fbd51532 Mon Sep 17 00:00:00 2001 +From: LeelaPakanati <LeelaPakanati.gmail.com> +Date: Fri, 13 Dec 2019 16:56:42 -0500 +Subject: [PATCH] Add function handling at keyrelease + +--- + config.def.h | 6 ++++++ + tabbed.c | 30 +++++++++++++++++++++++++++++- + 2 files changed, 35 insertions(+), 1 deletion(-) + +diff --git a/config.def.h b/config.def.h +index defa426..7bfda30 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -64,3 +64,9 @@ static Key keys[] = { + + { 0, XK_F11, fullscreen, { 0 } }, + }; ++ ++static Key keyreleases[] = { ++ /* modifier key function argument */ ++ { 0, XK_Shift_L, NULL, { 0 } }, ++ ++}; +diff --git a/tabbed.c b/tabbed.c +index ff3ada0..fe38b9d 100644 +--- a/tabbed.c ++++ b/tabbed.c +@@ -113,6 +113,7 @@ static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); + static void initfont(const char *fontstr); + static Bool isprotodel(int c); + static void keypress(const XEvent *e); ++static void keyrelease(const XEvent *e); + static void killclient(const Arg *arg); + static void manage(Window win); + static void maprequest(const XEvent *e); +@@ -149,6 +150,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = { + [Expose] = expose, + [FocusIn] = focusin, + [KeyPress] = keypress, ++ [KeyRelease] = keyrelease, + [MapRequest] = maprequest, + [PropertyNotify] = propertynotify, + }; +@@ -664,6 +666,22 @@ keypress(const XEvent *e) + } + } + ++void ++keyrelease(const XEvent *e) ++{ ++ const XKeyEvent *ev = &e->xkey; ++ unsigned int i; ++ KeySym keysym; ++ ++ keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); ++ for (i = 0; i < LENGTH(keyreleases); i++) { ++ if (keysym == keyreleases[i].keysym && ++ CLEANMASK(keyreleases[i].mod) == CLEANMASK(ev->state) && ++ keyreleases[i].func) ++ keyreleases[i].func(&(keyreleases[i].arg)); ++ } ++} ++ + void + killclient(const Arg *arg) + { +@@ -714,6 +732,16 @@ manage(Window w) + } + } + ++ for (i = 0; i < LENGTH(keyreleases); i++) { ++ if ((code = XKeysymToKeycode(dpy, keyreleases[i].keysym))) { ++ for (j = 0; j < LENGTH(modifiers); j++) { ++ XGrabKey(dpy, code, keyreleases[i].mod | ++ modifiers[j], w, True, ++ GrabModeAsync, GrabModeAsync); ++ } ++ } ++ } ++ + c = ecalloc(1, sizeof *c); + c->win = w; + +@@ -1036,7 +1064,7 @@ setup(void) + XMapRaised(dpy, win); + XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask | + ButtonPressMask | ExposureMask | KeyPressMask | +- PropertyChangeMask | StructureNotifyMask | ++ KeyReleaseMask | PropertyChangeMask | StructureNotifyMask | + SubstructureRedirectMask); + xerrorxlib = XSetErrorHandler(xerror); + +-- +2.24.0 +