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.
|
||||
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
|
||||
|
|
|
@ -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 ||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue