diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 8ccb0c7..98c0e8d 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -708,6 +708,8 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value, func = tagtoright; } else if (strcmp(func_name, "killclient") == 0) { func = killclient; + } else if (strcmp(func_name, "centerwin") == 0) { + func = centerwin; } else if (strcmp(func_name, "focuslast") == 0) { func = focuslast; } else if (strcmp(func_name, "setlayout") == 0) { diff --git a/src/dispatch/bind_declare.h b/src/dispatch/bind_declare.h index 452908b..d4ef97c 100644 --- a/src/dispatch/bind_declare.h +++ b/src/dispatch/bind_declare.h @@ -38,6 +38,7 @@ void chvt(const Arg *arg); void reload_config(const Arg *arg); void smartmovewin(const Arg *arg); void smartresizewin(const Arg *arg); +void centerwin(const Arg *arg); void bind_to_view(const Arg *arg); void toggletag(const Arg *arg); void toggleview(const Arg *arg); diff --git a/src/dispatch/bind_define.h b/src/dispatch/bind_define.h index 582219b..2c6e43f 100644 --- a/src/dispatch/bind_define.h +++ b/src/dispatch/bind_define.h @@ -601,6 +601,20 @@ void smartresizewin(const Arg *arg) { resize(c, c->oldgeom, 1); } +void centerwin(const Arg *arg) { + Client *c; + c = selmon->sel; + + if (!c || c->isfullscreen) + return; + if (!c->isfloating) + setfloating(c, true); + + c->oldgeom = setclient_coordinate_center(c, c->geom, 0, 0); + + resize(c, c->oldgeom, 1); +} + void spawn(const Arg *arg) { if (!arg->v)