如何在dwm中实现圆形切换布局?

时间:2012-11-15 18:44:38

标签: c dwm

默认情况下,dwm config.h为每个布局提供一个键绑定。

{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },

我想在我的dwm配置中获取功能,这将以圆圈方式改变可接受的布局。

这样的事情:

static void circlesetlayout (const Arg *arg);
...
{ MODKEY, XK_space,  circlesetlayout, {0} },
...
void
circlesetlayout (const Arg *arg) {
  Arg finallayout;
  if (Monitor.sellt == 2) {
    finallayout.v = &layouts[0];
  } else {
    finallayout.v = &layouts[1];
  }
  setlayout (&finallayout);
}

但它没有按照我期望的方式发挥作用。

1 个答案:

答案 0 :(得分:2)

这对我有用:

void
setnextlayout(const Arg *arg) {
    Arg newarg = {0};

    size_t i = 0;
    while(i < LENGTH(layouts) && selmon->lt[selmon->sellt] != &layouts[i])
        i++;

    newarg.v = &layouts[(i + 1) % LENGTH(layouts)]; // you can do it without '%'
    setlayout(&newarg);
}