]> git.sur5r.net Git - i3/i3/commitdiff
introduce new command to rename focused workspace
authorMichael Walle <michael@walle.cc>
Mon, 29 Oct 2012 21:42:20 +0000 (22:42 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 31 Oct 2012 08:09:56 +0000 (09:09 +0100)
The corresponding command is 'rename workspace to <name>'. As a side-effect
this fixes the command 'rename workspace 1 to to'.

Signed-off-by: Michael Walle <michael@walle.cc>
docs/userguide
parser-specs/commands.spec
src/commands.c
testcases/t/117-workspace.t

index 72555b53d1fe0505712c7d29e7ee362a65b3d8b2..f78b4913c614f688d6c82c6582ec2d84a30f0dca 100644 (file)
@@ -1503,19 +1503,24 @@ specify a default name if there's currently no workspace starting with a "1".
 
 You can rename workspaces. This might be useful to start with the default
 numbered workspaces, do your work, and rename the workspaces afterwards to
-reflect what’s actually on them.
+reflect what’s actually on them. You can also omit the old name to rename
+the currently focused workspace. This is handy if you wan't to use the
+rename command with +i3-input+.
 
 *Syntax*:
 ----------------------------------------------------
 rename workspace <old_name> to <new_name>
+rename workspace to <new_name>
 ----------------------------------------------------
 
 *Examples*:
-------------------------------------------------
+--------------------------------------------------------------------------
 i3-msg 'rename workspace 5 to 6'
 i3-msg 'rename workspace 1 to "1: www"'
 i3-msg 'rename workspace "1: www" to "10: www"'
-------------------------------------------------
+i3-msg 'rename workspace to "2: mail"
+bindsym $mod+r exec i3-input -F 'rename workspace to %s' -P 'New name: '
+--------------------------------------------------------------------------
 
 === Moving containers/workspaces to RandR outputs
 
index 4224707c4c8829122d6c0368bcb583f7cc61f8f6..c9b881b3e13d88a9a963cf12536f0f3c97e8b10a 100644 (file)
@@ -195,17 +195,30 @@ state RESIZE_TILING_OR:
       -> call cmd_resize($way, $direction, $resize_px, $resize_ppt)
 
 # rename workspace <name> to <name>
+# rename workspace to <name>
 state RENAME:
   'workspace'
       -> RENAME_WORKSPACE
 
 state RENAME_WORKSPACE:
+  old_name = 'to'
+      -> RENAME_WORKSPACE_LIKELY_TO
   old_name = word
       -> RENAME_WORKSPACE_TO
 
+state RENAME_WORKSPACE_LIKELY_TO:
+  'to'
+      -> RENAME_WORKSPACE_NEW_NAME
+  new_name = word
+      -> call cmd_rename_workspace(NULL, $new_name)
+
 state RENAME_WORKSPACE_TO:
   'to'
-      ->
+      -> RENAME_WORKSPACE_NEW_NAME
+
+state RENAME_WORKSPACE_NEW_NAME:
+  end
+      -> call cmd_rename_workspace(NULL, "to")
   new_name = string
       -> call cmd_rename_workspace($old_name, $new_name)
 
index 4b2b2d2ab0af81a5d6141285487e1441f5f41db7..cb53a31ec3ccc9d19621dda51cd761a7d4f047cc 100644 (file)
@@ -1802,16 +1802,24 @@ void cmd_scratchpad_show(I3_CMD) {
 }
 
 /*
- * Implementation of 'rename workspace <name> to <name>'
+ * Implementation of 'rename workspace [<name>] to <name>'
  *
  */
 void cmd_rename_workspace(I3_CMD, char *old_name, char *new_name) {
-    LOG("Renaming workspace \"%s\" to \"%s\"\n", old_name, new_name);
+    if (old_name) {
+        LOG("Renaming workspace \"%s\" to \"%s\"\n", old_name, new_name);
+    } else {
+        LOG("Renaming current workspace to \"%s\"\n", new_name);
+    }
 
     Con *output, *workspace = NULL;
-    TAILQ_FOREACH(output, &(croot->nodes_head), nodes)
-        GREP_FIRST(workspace, output_get_content(output),
-            !strcasecmp(child->name, old_name));
+    if (old_name) {
+        TAILQ_FOREACH(output, &(croot->nodes_head), nodes)
+            GREP_FIRST(workspace, output_get_content(output),
+                !strcasecmp(child->name, old_name));
+    } else {
+        workspace = con_get_workspace(focused);
+    }
 
     if (!workspace) {
         // TODO: we should include the old workspace name here and use yajl for
index 2283ddc1370591c767ba496a2b9dfbd8660b136b..d8a8733ba1cfb3111733a193df87ef401090a47c 100644 (file)
@@ -254,11 +254,38 @@ $ws = get_ws('qux');
 is($ws->{num}, -1, 'number correctly changed');
 workspace_numbers_sorted();
 
-# 5: already existing workspace
+# 4: rename current workspace
+cmd 'workspace 4711';
+is(focused_ws(), '4711', 'now on workspace 4711');
+
+ok(!workspace_exists('42'), 'workspace 42 does not exist yet');
+cmd 'rename workspace to 42';
+ok(!workspace_exists('4711'), 'workspace 4711 does not exist anymore');
+is(focused_ws(), '42', 'now on workspace 42');
+$ws = get_ws('42');
+is($ws->{num}, 42, 'number correctly changed');
+workspace_numbers_sorted();
+
+# 5: special cases
+cmd 'workspace bla';
+is(focused_ws(), 'bla', 'now on workspace to');
+
+ok(!workspace_exists('to'), 'workspace to does not exist yet');
+cmd 'rename workspace bla to to';
+ok(!workspace_exists('bla'), 'workspace bla does not exist anymore');
+is(focused_ws(), 'to', 'now on workspace to');
+cmd 'rename workspace to to bla';
+ok(!workspace_exists('to'), 'workspace to does not exist anymore');
+is(focused_ws(), 'bla', 'now on workspace bla');
+cmd 'rename workspace to to';
+ok(!workspace_exists('bla'), 'workspace bla does not exist anymore');
+is(focused_ws(), 'to', 'now on workspace to');
+
+# 6: already existing workspace
 my $result = cmd 'rename workspace qux to 11: bar';
 ok(!$result->[0]->{success}, 'renaming workspace to an already existing one failed');
 
-# 6: non-existing old workspace (verify command result)
+# 7: non-existing old workspace (verify command result)
 $result = cmd 'rename workspace notexistant to bleh';
 ok(!$result->[0]->{success}, 'renaming workspace which does not exist failed');