From: Ingo Bürk Date: Thu, 23 Feb 2017 23:58:19 +0000 (+0100) Subject: Merge pull request #2649 from s3rb31/next X-Git-Tag: 4.14~49 X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=commitdiff_plain;h=c474ddd782782190f48c0ea045d485e7974977a0;hp=-c Merge pull request #2649 from s3rb31/next layout toggle: take any combination of layouts as arguments (continuation of #2476) --- c474ddd782782190f48c0ea045d485e7974977a0 diff --combined docs/userguide index 69eeda35,21d08625..40e9e3b9 --- a/docs/userguide +++ b/docs/userguide @@@ -479,7 -479,7 +479,7 @@@ mode >. *Syntax*: -------------------------------- @@@ -1822,6 -1823,11 +1823,11 @@@ Use +layout toggle split+, +layout stac or +layout splith+ to change the current container layout to splith/splitv, stacking, tabbed layout, splitv or splith, respectively. + Specify up to four layouts after +layout toggle+ to cycle through them. Every + time the command is executed, the layout specified after the currently active + one will be applied. If the currently active layout is not in the list, the + first layout in the list will be activated. + To make the current window (!) fullscreen, use +fullscreen enable+ (or +fullscreen enable global+ for the global mode), to leave either fullscreen mode use +fullscreen disable+, and to toggle between these two states use @@@ -1834,6 -1840,7 +1840,7 @@@ enable+ respectively +floating disable -------------------------------------------- layout default|tabbed|stacking|splitv|splith layout toggle [split|all] + layout toggle [split|tabbed|stacking|splitv|splith] [split|tabbed|stacking|splitv|splith]… -------------------------------------------- *Examples*: @@@ -1848,6 -1855,15 +1855,15 @@@ bindsym $mod+x layout toggl # Toggle between stacking/tabbed/splith/splitv: bindsym $mod+x layout toggle all + # Toggle between stacking/tabbed/splith: + bindsym $mod+x layout toggle stacking tabbed splith + + # Toggle between splitv/tabbed + bindsym $mod+x layout toggle splitv tabbed + + # Toggle between last split layout/tabbed/stacking + bindsym $mod+x layout toggle split tabbed stacking + # Toggle fullscreen bindsym $mod+f fullscreen toggle @@@ -2090,23 -2106,6 +2106,23 @@@ i3-msg 'rename workspace to "2: mail" bindsym $mod+r exec i3-input -F 'rename workspace to "%s"' -P 'New name: ' -------------------------------------------------------------------------- +If you want to rename workspaces on demand while keeping the navigation stable, +you can use a setup like this: + +*Example*: +------------------------- +bindsym $mod+1 workspace number "1: www" +bindsym $mod+2 workspace number "2: mail" +... +------------------------- + +If a workspace does not exist, the command +workspace number "1: mail"+ will +create workspace "1: mail". + +If a workspace with number 1 does already exist, the command will switch to this +workspace and ignore the text part. So even when the workspace has been renamed +to "1: web", the above command will still switch to it. + === Moving workspaces to a different screen See <> for how to move a container/workspace to a different diff --combined src/commands.c index 56c07b6a,44a5d8a4..33737f71 --- a/src/commands.c +++ b/src/commands.c @@@ -1489,21 -1489,8 +1489,8 @@@ void cmd_move_direction(I3_CMD, const c void cmd_layout(I3_CMD, const char *layout_str) { HANDLE_EMPTY_MATCH; - if (strcmp(layout_str, "stacking") == 0) - layout_str = "stacked"; layout_t layout; - /* default is a special case which will be handled in con_set_layout(). */ - if (strcmp(layout_str, "default") == 0) - layout = L_DEFAULT; - else if (strcmp(layout_str, "stacked") == 0) - layout = L_STACKED; - else if (strcmp(layout_str, "tabbed") == 0) - layout = L_TABBED; - else if (strcmp(layout_str, "splitv") == 0) - layout = L_SPLITV; - else if (strcmp(layout_str, "splith") == 0) - layout = L_SPLITH; - else { + if (!layout_from_name(layout_str, &layout)) { ELOG("Unknown layout \"%s\", this is a mismatch between code and parser spec.\n", layout_str); return; } @@@ -1562,7 -1549,7 +1549,7 @@@ void cmd_exit(I3_CMD) #ifdef I3_ASAN_ENABLED __lsan_do_leak_check(); #endif - ipc_shutdown(); + ipc_shutdown(SHUTDOWN_REASON_EXIT); unlink(config.ipc_socket_path); xcb_disconnect(conn); exit(0); @@@ -1595,7 -1582,7 +1582,7 @@@ void cmd_reload(I3_CMD) */ void cmd_restart(I3_CMD) { LOG("restarting i3\n"); - ipc_shutdown(); + ipc_shutdown(SHUTDOWN_REASON_RESTART); unlink(config.ipc_socket_path); /* We need to call this manually since atexit handlers don’t get called * when exec()ing */ diff --combined src/util.c index 5c8fc774,0289ded9..06fbea2a --- a/src/util.c +++ b/src/util.c @@@ -66,6 -66,34 +66,34 @@@ __attribute__((pure)) bool name_is_digi return true; } + /* + * Set 'out' to the layout_t value for the given layout. The function + * returns true on success or false if the passed string is not a valid + * layout name. + * + */ + bool layout_from_name(const char *layout_str, layout_t *out) { + if (strcmp(layout_str, "default") == 0) { + *out = L_DEFAULT; + return true; + } else if (strcasecmp(layout_str, "stacked") == 0 || + strcasecmp(layout_str, "stacking") == 0) { + *out = L_STACKED; + return true; + } else if (strcasecmp(layout_str, "tabbed") == 0) { + *out = L_TABBED; + return true; + } else if (strcasecmp(layout_str, "splitv") == 0) { + *out = L_SPLITV; + return true; + } else if (strcasecmp(layout_str, "splith") == 0) { + *out = L_SPLITH; + return true; + } + + return false; + } + /* * Parses the workspace name as a number. Returns -1 if the workspace should be * interpreted as a "named workspace". @@@ -259,7 -287,7 +287,7 @@@ void i3_restart(bool forget_layout) restore_geometry(); - ipc_shutdown(); + ipc_shutdown(SHUTDOWN_REASON_RESTART); LOG("restarting \"%s\"...\n", start_argv[0]); /* make sure -a is in the argument list or add it */