No need to track our own order; wlroots has a reasonable default for us already.
FUZEZTLBNTVGUNLBGFLMVZOHLGMMHFPQD7USP4JYMGGVXBL2EUBQC GRIYU3BNZXANVGAYDQNJ7INQH4QYRRYWTFBEEHWT2Q6COSUEJ5LAC 3VV4BEF4XL3UURJHRQ3MEC3E3IIE6KMNKY7DHQTMQ4QBACKIKLMQC MO5ORR7VSER3YUNO77DZJVKGOVYC2KNDCSC72J4NF7JYOHHTLRQAC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC SP45PRAMJKF52GEK4TQU6PQQ3AY3KRXCUDGQNUN65UOBA4R6VL6QC MIZBQX6SKECIVNNGBF3LCR3IHXQVWQ5BJURMRSBNEVEUWFBH3MTQC D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC W32YIHMVPAREXUADJOAX45B6CTXZY42EE77RDDZYNJFEE2HLQ3HAC 5XQORC75PLJP67TLAYROELKQ7RNQZFZ4PLOWJ7EKAVPNUDCMW2BQC LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC Monitor *m;if (dir > 0) {if (selmon->link.next == &mons)return wl_container_of(mons.next, m, link);return wl_container_of(selmon->link.next, m, link);} else {if (selmon->link.prev == &mons)return wl_container_of(mons.prev, m, link);return wl_container_of(selmon->link.prev, m, link);}
struct wlr_output *next;if ((next = wlr_output_layout_adjacent_output(output_layout,dir, selmon->wlr_output, selmon->m.x, selmon->m.y)))return next->data;if ((next = wlr_output_layout_farthest_output(output_layout,dir ^ (WLR_DIRECTION_LEFT|WLR_DIRECTION_RIGHT),selmon->wlr_output, selmon->m.x, selmon->m.y)))return next->data;return selmon;
{ MODKEY, XKB_KEY_comma, focusmon, {.i = -1} },{ MODKEY, XKB_KEY_period, focusmon, {.i = +1} },{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = -1} },{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = +1} },
{ MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} },{ MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} },{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} },{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} },