id { BEGIN(WANT_QSTRING); return TOK_ID; }
con_id { BEGIN(WANT_QSTRING); return TOK_CON_ID; }
con_mark { BEGIN(WANT_QSTRING); return TOK_MARK; }
+title { BEGIN(WANT_QSTRING); return TOK_TITLE; }
[0-9]+ { cmdyylval.number = atoi(yytext); return NUMBER; }
%token TOK_CLASS "class"
%token TOK_ID "id"
%token TOK_CON_ID "con_id"
+%token TOK_TITLE "title"
%token <string> STR "<string>"
%token <number> NUMBER "<number>"
;
criteria:
+ criteria criterion
+ | criterion
+ ;
+
+criterion:
TOK_CLASS '=' STR
{
printf("criteria: class = %s\n", $3);
printf("criteria: mark = %s\n", $3);
current_match.mark = $3;
}
+ | TOK_TITLE '=' STR
+ {
+ printf("criteria: title = %s\n", $3);
+ current_match.title = $3;
+ }
;
operations:
{
owindow *current;
- printf("should focus\n");
if (match_is_empty(¤t_match)) {
- /* TODO: better error message */
- LOG("Error: The focus command requires you to use some criteria.\n");
+ ELOG("You have to specify which window/container should be focused.\n");
+ ELOG("Example: [class=\"urxvt\" title=\"irssi\"] focus\n");
+
+ asprintf(&json_output, "{\"success\":false, \"error\":\"You have to "
+ "specify which window/container should be focused\"}");
break;
}
- /* TODO: warning if the match contains more than one entry. does not
- * make so much sense when focusing */
+ int count = 0;
TAILQ_FOREACH(current, &owindows, owindows) {
LOG("focusing %p / %s\n", current->con, current->con->name);
con_focus(current->con);
+ count++;
}
+ if (count > 1)
+ LOG("WARNING: Your criteria for the focus command matches %d containers, "
+ "while only exactly one container can be focused at a time.\n", count);
+
tree_render();
}
| TOK_FOCUS direction
#!perl
# vim:ts=4:sw=4:expandtab
-use i3test tests => 6;
+use i3test;
use X11::XCB qw(:all);
use Digest::SHA1 qw(sha1_base64);
$focus = focus_after(qq|[con_mark="$random_mark"] focus|);
is($focus, $mid->id, "goto worked");
+# check that we can specify multiple criteria
+
+$focus = focus_after('focus left');
+is($focus, $top->id, "Top window focused");
+
+$focus = focus_after(qq|[con_mark="$random_mark" con_mark="$random_mark"] focus|);
+is($focus, $mid->id, "goto worked");
+
+
done_testing;