Allow multiple marks on windows.

This patch allows multiple marks to be set on a single window. The restriction that a mark may
only be on one window at a time is still upheld as this is necessary for commands like
"move window to mark" to make sense.

relates to #2014
This commit is contained in:
Ingo Bürk
2015-10-19 18:10:20 +02:00
parent 0425f48835
commit 9bb2f038ab
12 changed files with 238 additions and 70 deletions

View File

@ -28,7 +28,7 @@ sub get_mark_for_window_on_workspace {
my ($ws, $con) = @_;
my $current = first { $_->{window} == $con->{id} } @{get_ws_content($ws)};
return $current->{mark};
return $current->{marks};
}
##############################################################
@ -41,7 +41,6 @@ cmd 'split h';
is_deeply(get_marks(), [], 'no marks set yet');
##############################################################
# 2: mark a con, check that it's marked, unmark it, check that
##############################################################
@ -98,7 +97,7 @@ cmd 'mark important';
cmd 'focus left';
cmd 'mark important';
is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'first container now has the mark');
is_deeply(get_mark_for_window_on_workspace($tmp, $first), [ 'important' ], 'first container now has the mark');
ok(!get_mark_for_window_on_workspace($tmp, $second), 'second container lost the mark');
##############################################################
@ -116,20 +115,10 @@ ok(!get_mark_for_window_on_workspace($tmp, $con), 'container no longer has the m
$con = open_window;
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container now has the mark');
is_deeply(get_mark_for_window_on_workspace($tmp, $con), [ 'important' ], 'container now has the mark');
##############################################################
# 7: mark a con, toggle a different mark, check it is marked
# with the new mark
##############################################################
$con = open_window;
cmd 'mark boring';
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container has the most recent mark');
##############################################################
# 8: mark a con, toggle the mark on another con,
# 7: mark a con, toggle the mark on another con,
# check only the latter has the mark
##############################################################
@ -140,11 +129,11 @@ cmd 'mark important';
cmd 'focus left';
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'left container has the mark now');
is_deeply(get_mark_for_window_on_workspace($tmp, $first), [ 'important' ], 'left container has the mark now');
ok(!get_mark_for_window_on_workspace($tmp, $second), 'second containr no longer has the mark');
##############################################################
# 9: try to mark two cons with the same mark and check that
# 8: try to mark two cons with the same mark and check that
# it fails
##############################################################