Added a "jump" command to directly focus a container.
Syntax is "jump <ws> <row> <col>". 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.
This commit is contained in:
parent
28f0700ef8
commit
efbe2dfeaa
|
@ -585,6 +585,39 @@ void show_workspace(xcb_connection_t *conn, int workspace) {
|
||||||
render_layout(conn);
|
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
|
* Parses a command, see file CMDMODE for more information
|
||||||
*
|
*
|
||||||
|
@ -626,6 +659,12 @@ void parse_command(xcb_connection_t *conn, const char *command) {
|
||||||
return;
|
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? */
|
/* Is it 'f' for fullscreen? */
|
||||||
if (command[0] == 'f') {
|
if (command[0] == 'f') {
|
||||||
if (CUR_CELL->currently_focused == NULL)
|
if (CUR_CELL->currently_focused == NULL)
|
||||||
|
|
Loading…
Reference in New Issue