+ if (STARTS_WITH(command, "mark")) {
+ if (last_focused == NULL) {
+ ELOG("There is no window to mark\n");
+ return;
+ }
+ const char *rest = command + strlen("mark");
+ while (*rest == ' ')
+ rest++;
+ if (*rest == '\0') {
+ DLOG("interactive mark starting\n");
+ start_application("i3-input -p 'mark ' -l 1 -P 'Mark: '");
+ } else {
+ LOG("mark with \"%s\"\n", rest);
+ client_mark(conn, last_focused, rest);
+ }
+ return;
+ }
+
+ if (STARTS_WITH(command, "goto")) {
+ const char *rest = command + strlen("goto");
+ while (*rest == ' ')
+ rest++;
+ if (*rest == '\0') {
+ DLOG("interactive go to mark starting\n");
+ start_application("i3-input -p 'goto ' -l 1 -P 'Goto: '");
+ } else {
+ LOG("go to \"%s\"\n", rest);
+ jump_to_mark(conn, rest);
+ }
+ return;
+ }
+
+ if (STARTS_WITH(command, "stack-limit ")) {
+ if (last_focused == NULL || client_is_floating(last_focused)) {
+ ELOG("No container focused\n");
+ return;
+ }
+ const char *rest = command + strlen("stack-limit ");
+ if (strncmp(rest, "rows ", strlen("rows ")) == 0) {
+ last_focused->container->stack_limit = STACK_LIMIT_ROWS;
+ rest += strlen("rows ");
+ } else if (strncmp(rest, "cols ", strlen("cols ")) == 0) {
+ last_focused->container->stack_limit = STACK_LIMIT_COLS;
+ rest += strlen("cols ");
+ } else {
+ ELOG("Syntax: stack-limit <cols|rows> <limit>\n");
+ return;
+ }
+
+ last_focused->container->stack_limit_value = atoi(rest);
+ if (last_focused->container->stack_limit_value == 0)
+ last_focused->container->stack_limit = STACK_LIMIT_NONE;
+
+ return;
+ }
+
+ if (STARTS_WITH(command, "resize ")) {
+ if (last_focused == NULL)
+ return;
+ const char *rest = command + strlen("resize ");
+ parse_resize_command(conn, last_focused, rest);
+ return;
+ }
+
+ if (STARTS_WITH(command, "mode ")) {
+ const char *rest = command + strlen("mode ");
+ switch_mode(conn, rest);
+ return;
+ }
+