切换(已命名)工作区和移动至新工作区

要切换到一个工作区,应使用 workspace 命令,加上工作区的编号或名字。加上可选的选项 --no-auto-back-and-forth 以对本次命令禁用自动来回切换

要移动容器到一个工作区,使用 move container to workspace

你也可以通过命令 workspace nextworkspace prev 切换到下一个和上一个工作区。例如,如果你有工作区 1、3、4 和 9,然后你想用一个组合键循环浏览它们,用这两个命令就这很方便。如果要将这些限制在当前的输出,可以使用 workspace next_on_outputworkspace prev_on_output。同样,你可以使用 move container to workspace nextmove container to workspace prev 来将一个容器移动到下一个/上一个工作区,以及 move container to workspace current(最后一个命令只有在与判断标准一起使用时才有意义)。

workspace next 可在编号的或命名的工作区中循环。但当它到达最后一个编号的/命名的工作区时,它在遍历完编号的工作区后会寻找命名的工作区,在遍历完命名的工作区后会寻找编号的工作区。

对于如何移动容器/工作区到一个不同的 RandR 输出,见移动容器或工作区到 RandR 输出

工作区的名字会以 Pango 标记 的格式被 i3bar 解析。

要切换回之前聚焦的工作区,使用 workspace back_and_forth;类似地你可以用 move container to workspace back_and_forth 来将一个容器移动到之前聚焦的工作区。

格式:

workspace next|prev|next_on_output|prev_on_output
workspace back_and_forth
workspace [--no-auto-back-and-forth] <名字>
workspace [--no-auto-back-and-forth] number <名字>

move [--no-auto-back-and-forth] [window|container] [to] workspace <名字>
move [--no-auto-back-and-forth] [window|container] [to] workspace number <名字>
move [window|container] [to] workspace prev|next|current

举例:

bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3:<span foreground="red">vim</span>
...

bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
...

# 在当前聚焦的和上一个聚焦的工作区之间切换
bindsym $mod+b workspace back_and_forth
bindsym $mod+Shift+b move container to workspace back_and_forth

# 移动整个工作间到右边的显示输出
bindsym $mod+x move workspace to output right

# 移动 firefox 到当前工作区
bindsym $mod+F1 [class="Firefox"] move workspace current

命名的工作区

工作区用名字来标识。所以你可以可以在 workspace 命令中使用任意名字,而不只是数字:

bindsym $mod+1 workspace mail
...

如果你想让工作区同时有编号和名字,你可以在名字前面添加编号,像这样:

bindsym $mod+1 workspace 1: mail
bindsym $mod+2 workspace 2: www
...

注意,在这种情况下工作区将被命名为 "1: mail"。i3 以一种稍微特殊的方式处理以数字开头的工作区名称。通常情况下,命名的工作区是按照它们出现的顺序排序的。当它们以数字开头时,i3 将按数字排序。另外,你能用 workspace number 1 来切换到以数字 1 开头的工作区,而不管它的名字是什么。这在你动态改变工作区名称的情况下非常有用。要结合两个命令,你可以使用 workspace number 1: mail 来指定一个默认名字,如果目前没有以 "1" 开头的工作区的话。

重命名工作区

你可以重命名工作区。如果你从默认的编号的工作区开始做你的工作,并在之后重命名工作区以反映它们上的实际内容,这可能是有用的。你也可以省略旧的名字来重命名当前聚焦的工作区,如果你想在 i3-input 中使用重命名命令,这很方便。

格式:

rename workspace <旧名字> to <新名字>
rename workspace to <新名字>

举例:

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: '

如果你想在保持切换命令稳定的同时按需重命名工作空间,你可以使用这样的设置。

bindsym $mod+1 workspace number "1: www"
bindsym $mod+2 workspace number "2: mail"
...

如果工作区不存在,命令 workspace number "1: mail" 将会创建名为 "1: mail" 的工作区。

如果编号为 1 的工作区存在,此命令将切换到这个工作区并忽略名字。所以即使这个工作区被重命名为了 "1: web",上面的命令仍然会切换到它。