turn focusnext into dwm's focusstack
parent
59b09576b9
commit
623867a367
|
@ -32,8 +32,10 @@ static const struct xkb_rule_names xkb_rules = {
|
||||||
static const char *termcmd[] = { "kitty", "-o", "linux_display_server=wayland", NULL };
|
static const char *termcmd[] = { "kitty", "-o", "linux_display_server=wayland", NULL };
|
||||||
|
|
||||||
static const Key keys[] = {
|
static const Key keys[] = {
|
||||||
|
/* modifier key function argument */
|
||||||
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd } },
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd } },
|
||||||
{ MODKEY, XKB_KEY_j, focusnext, {0} },
|
{ MODKEY, XKB_KEY_j, focusstack, {.i = +1} },
|
||||||
|
{ MODKEY, XKB_KEY_k, focusstack, {.i = -1} },
|
||||||
{ MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} },
|
{ MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} },
|
||||||
{ MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} },
|
{ MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} },
|
||||||
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q, quit, {0} },
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q, quit, {0} },
|
||||||
|
|
17
dwl.c
17
dwl.c
|
@ -125,7 +125,7 @@ static void createpointer(struct wlr_input_device *device);
|
||||||
static void cursorframe(struct wl_listener *listener, void *data);
|
static void cursorframe(struct wl_listener *listener, void *data);
|
||||||
static void destroynotify(struct wl_listener *listener, void *data);
|
static void destroynotify(struct wl_listener *listener, void *data);
|
||||||
static void focus(Client *c, struct wlr_surface *surface);
|
static void focus(Client *c, struct wlr_surface *surface);
|
||||||
static void focusnext(const Arg *arg);
|
static void focusstack(const Arg *arg);
|
||||||
static void inputdevice(struct wl_listener *listener, void *data);
|
static void inputdevice(struct wl_listener *listener, void *data);
|
||||||
static bool keybinding(uint32_t mods, xkb_keysym_t sym);
|
static bool keybinding(uint32_t mods, xkb_keysym_t sym);
|
||||||
static void keypress(struct wl_listener *listener, void *data);
|
static void keypress(struct wl_listener *listener, void *data);
|
||||||
|
@ -409,20 +409,29 @@ focus(Client *c, struct wlr_surface *surface)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
focusnext(const Arg *arg)
|
focusstack(const Arg *arg)
|
||||||
{
|
{
|
||||||
/* Focus the client on the selected monitor which comes first in tiling
|
/* Focus the next or previous client (in tiling order) on selmon */
|
||||||
* order after the currently selected client */
|
|
||||||
Client *sel = selclient();
|
Client *sel = selclient();
|
||||||
if (!sel)
|
if (!sel)
|
||||||
return;
|
return;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
if (arg->i > 0) {
|
||||||
wl_list_for_each(c, &sel->link, link) {
|
wl_list_for_each(c, &sel->link, link) {
|
||||||
if (&c->link == &clients)
|
if (&c->link == &clients)
|
||||||
continue; /* wrap past the sentinel node */
|
continue; /* wrap past the sentinel node */
|
||||||
if (VISIBLEON(c, selmon))
|
if (VISIBLEON(c, selmon))
|
||||||
break; /* found it */
|
break; /* found it */
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
wl_list_for_each_reverse(c, &sel->link, link) {
|
||||||
|
if (&c->link == &clients)
|
||||||
|
continue; /* wrap past the sentinel node */
|
||||||
|
if (VISIBLEON(c, selmon))
|
||||||
|
break; /* found it */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If only one client is visible on selmon, then c == sel */
|
||||||
focus(c, c->xdg_surface->surface);
|
focus(c, c->xdg_surface->surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue