Introduce special value __focused__ for criterion con_id.

This allows matching with

    [con_id=__focused__] unmark

for commands that do not default to operating on the focused window
if no criteria have been specified (such as unmark).

relates to #2014
next
Ingo Bürk 2015-10-22 15:38:23 +02:00
parent 9537ada5ad
commit 60158d31a2
3 changed files with 28 additions and 1 deletions

View File

@ -1664,7 +1664,8 @@ con_mark::
mark.
con_id::
Compares the i3-internal container ID, which you can get via the IPC
interface. Handy for scripting.
interface. Handy for scripting. Use the special value +\_\_focused__+
to match only the currently focused window.
The criteria +class+, +instance+, +role+, +title+, +workspace+ and +mark+ are
actually regular expressions (PCRE). See +pcresyntax(3)+ or +perldoc perlre+ for

View File

@ -279,6 +279,11 @@ void match_parse_property(Match *match, const char *ctype, const char *cvalue) {
}
if (strcmp(ctype, "con_id") == 0) {
if (strcmp(cvalue, "__focused__") == 0) {
match->con_id = focused;
return;
}
char *end;
long parsed = strtol(cvalue, &end, 10);
if (parsed == LONG_MIN ||

View File

@ -91,6 +91,27 @@ is_deeply(get_mark_for_window_on_workspace($ws, $con), [ 'A', 'B', 'C' ], 'match
cmd 'unmark';
###############################################################################
# Verify that "unmark" can be matched on the focused window.
###############################################################################
$ws = fresh_workspace;
$con = open_window;
cmd 'mark --add A';
cmd 'mark --add B';
open_window;
cmd 'mark --add C';
cmd 'mark --add D';
is_deeply(sort(get_marks()), [ 'A', 'B', 'C', 'D' ], 'all marks exist');
cmd '[con_id=__focused__] unmark';
is_deeply(sort(get_marks()), [ 'A', 'B' ], 'marks on the unfocused window still exist');
is_deeply(get_mark_for_window_on_workspace($ws, $con), [ 'A', 'B' ], 'matching on con_id=__focused__ works for unmark');
cmd 'unmark';
###############################################################################
done_testing;