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:
Urs Ganse 2009-03-29 14:53:48 +02:00 committed by Michael Stapelberg
parent 28f0700ef8
commit efbe2dfeaa
1 changed files with 39 additions and 0 deletions

View File

@ -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)