diff --git a/parser-specs/config.spec b/parser-specs/config.spec index 8622c62e..7a31a5d8 100644 --- a/parser-specs/config.spec +++ b/parser-specs/config.spec @@ -270,6 +270,8 @@ state FONT: # bindsym/bindcode state BINDING: + release = '--release' + -> modifiers = 'Mod1', 'Mod2', 'Mod3', 'Mod4', 'Mod5', 'Shift', 'Control', 'Ctrl', 'Mode_switch' -> '+' @@ -313,6 +315,8 @@ state MODE_IGNORE_LINE: -> MODE state MODE_BINDING: + release = '--release' + -> modifiers = 'Mod1', 'Mod2', 'Mod3', 'Mod4', 'Mod5', 'Shift', 'Control', 'Ctrl', 'Mode_switch' -> '+' diff --git a/src/workspace.c b/src/workspace.c index 5a0913bf..4ccf421c 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -397,7 +397,7 @@ static void _workspace_show(Con *workspace) { * the corresponding workspace is cleaned up. * NOTE: Internal cons such as __i3_scratch (when a scratchpad window is * focused) are skipped, see bug #868. */ - if (current && !con_is_internal(current)) { + if (current && !(current->name[0] == '_' && current->name[1] == '_')) { FREE(previous_workspace_name); if (current) { previous_workspace_name = sstrdup(current->name); diff --git a/testcases/t/201-config-parser.t b/testcases/t/201-config-parser.t index ab3d7314..d6010795 100644 --- a/testcases/t/201-config-parser.t +++ b/testcases/t/201-config-parser.t @@ -44,6 +44,7 @@ my $config = <<'EOT'; mode "meh" { bindsym Mod1 + Shift + x resize grow bindcode Mod1+44 resize shrink + bindsym --release Mod1+x exec foo } EOT @@ -51,6 +52,7 @@ my $expected = <<'EOT'; cfg_enter_mode(meh) cfg_mode_binding(bindsym, Mod1,Shift, x, (null), resize grow) cfg_mode_binding(bindcode, Mod1, 44, (null), resize shrink) +cfg_mode_binding(bindsym, Mod1, x, --release, exec foo) EOT is(parser_calls($config),