From: Urs Ganse Date: Sun, 29 Mar 2009 12:53:48 +0000 (+0200) Subject: Added a "jump" command to directly focus a container. X-Git-Tag: 3.b~128 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=efbe2dfeaa8f7e5264c728d8b0004c7935147f1f;p=i3%2Fi3 Added a "jump" command to directly focus a container. Syntax is "jump ". This is quite handy for clients that you always keep in the same spot, and like to jump to quite often. The irc client would be an example. --- diff --git a/src/commands.c b/src/commands.c index 09c21b34..60e5a08f 100644 --- a/src/commands.c +++ b/src/commands.c @@ -585,6 +585,39 @@ void show_workspace(xcb_connection_t *conn, int workspace) { render_layout(conn); } +/* + * Jump directly to the specified workspace, row and col. + * Great for reaching windows that you always keep in the + * same spot (hello irssi, I'm looking at you) + */ +static void jump_to_container(xcb_connection_t *conn, const char* arg_str) { + int ws,row,col; + int result; + + result = sscanf(arg_str, "%i %i %i", &ws, &row, &col); + LOG("Jump called with parameters '%s', which parses as %i numbers\n", arg_str, result); + + /* No match? (This is technically a syntax error, but who cares.) */ + if(result < 1) + return; + + /* Move to the target workspace */ + show_workspace(conn, ws); + + if(result < 3) + return; + + /* Move to row/col */ + if(row >= c_ws->rows) + row = c_ws->rows - 1; + if(col >= c_ws->cols) + col = c_ws->cols - 1; + + LOG("Jumping to row %i, col %i\n", row, col); + if (c_ws->table[col][row]->currently_focused != NULL) + set_focus(conn, c_ws->table[col][row]->currently_focused); +} + /* * Parses a command, see file CMDMODE for more information * @@ -626,6 +659,12 @@ void parse_command(xcb_connection_t *conn, const char *command) { return; } + /* Is it a jump to a specified workspae,row,col? */ + if (STARTS_WITH(command, "jump ")) { + jump_to_container(conn, command+strlen("jump ")); + return; + } + /* Is it 'f' for fullscreen? */ if (command[0] == 'f') { if (CUR_CELL->currently_focused == NULL)