Skip to content

Instantly share code, notes, and snippets.

@smblott-github
Created December 26, 2018 06:38
Show Gist options
  • Select an option

  • Save smblott-github/5cc6595f6627244fdeac897668a19d72 to your computer and use it in GitHub Desktop.

Select an option

Save smblott-github/5cc6595f6627244fdeac897668a19d72 to your computer and use it in GitHub Desktop.
<alt-Tab> for dwm
/* this implements <alt-Tab> for dwm, put it in config.h */
static int alt_tab_count = 0;
/* focus and restack a client */
static void focus_restack(Client *c)
{ if (c) { focus(c); restack(selmon); } }
static void start_alt_tab(const Arg *arg)
{ alt_tab_count = 0; }
static Client *next_visible(Client *c)
{
for(/* DO_NOTHING */; c && !ISVISIBLE(c); c=c->snext);
return c;
}
static int count_visible(void)
{
int count = 0;
for (Client *c=next_visible(selmon->stack); c; c = next_visible(c->snext))
count += 1;
return count;
}
static Client *get_nth_client(int n)
{
Client *c;
for (c=next_visible(selmon->stack); c && n--; c = next_visible(c->snext));
return c;
}
static void alt_tab(const Arg *arg)
{
// put all of the windows back in their original focus/stack position */
for (int i=0; i<alt_tab_count; i+=1)
focus_restack(get_nth_client(alt_tab_count));
// focus and restack the nth window */
alt_tab_count = (alt_tab_count + 1) % count_visible();
focus_restack(get_nth_client(alt_tab_count));
}
/*
static Key keys[] = {
// ...
{ 0, XK_Alt_L, start_alt_tab, {0} },
{ MODKEY, XK_Tab, alt_tab, {0} },
// ...
};
*/
@smblott-github

smblott-github commented Dec 26, 2018

Copy link
Copy Markdown
Author

Starting with windows 1, 2, 3, 4, 5...

  • alt-down tab alt-up should leave 2, 1, 3, 4, 5

Starting with windows 1, 2, 3, 4, 5...

  • alt-down tab tab alt-up should leave 3, 1, 2, 4, 5
  • and now, <alt-Tab> toggles between 1 and 3

@gholt

gholt commented Aug 29, 2019

Copy link
Copy Markdown

This is pretty neat. However... 😉 ...once you do the 0, XK_Alt_L part dwm swallows anytime you hit the left alt. Meaning, alt shortcuts in other programs just don't work anymore with the left alt.

@bartimois

Copy link
Copy Markdown

Could this search clients throughout different tags aswell?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment