3

默认情况下,dwmconfig.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);
}

但它并没有以我期望的方式工作。

4

1 回答 1

2

This worked for me:

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);
}
于 2012-11-15T21:19:28.167 回答