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
This commit is contained in:
parent
9537ada5ad
commit
60158d31a2
|
@ -1664,7 +1664,8 @@ con_mark::
|
||||||
mark.
|
mark.
|
||||||
con_id::
|
con_id::
|
||||||
Compares the i3-internal container ID, which you can get via the IPC
|
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
|
The criteria +class+, +instance+, +role+, +title+, +workspace+ and +mark+ are
|
||||||
actually regular expressions (PCRE). See +pcresyntax(3)+ or +perldoc perlre+ for
|
actually regular expressions (PCRE). See +pcresyntax(3)+ or +perldoc perlre+ for
|
||||||
|
|
|
@ -279,6 +279,11 @@ void match_parse_property(Match *match, const char *ctype, const char *cvalue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(ctype, "con_id") == 0) {
|
if (strcmp(ctype, "con_id") == 0) {
|
||||||
|
if (strcmp(cvalue, "__focused__") == 0) {
|
||||||
|
match->con_id = focused;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char *end;
|
char *end;
|
||||||
long parsed = strtol(cvalue, &end, 10);
|
long parsed = strtol(cvalue, &end, 10);
|
||||||
if (parsed == LONG_MIN ||
|
if (parsed == LONG_MIN ||
|
||||||
|
|
|
@ -91,6 +91,27 @@ is_deeply(get_mark_for_window_on_workspace($ws, $con), [ 'A', 'B', 'C' ], 'match
|
||||||
|
|
||||||
cmd 'unmark';
|
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;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue