类似 VIM 的标记(mark 和 goto)

此功能类似于跳转功能:它允许你直接跳转到特定窗口(这意味着切换到适当的工作区并将焦点设置到窗口)。 但是,你可以使用任意标签直接标记特定窗口,然后再使用它。 你可以使用 unmark 命令以相同的方式取消标记标签。 如果你不指定标签,取消标记将删除所有标记。 你不需要确保你的窗口具有唯一的类或标题,也不需要更改你的配置文件。

由于该命令需要包含要用于标记窗口的标签,因此不能简单地将其绑定到一个键。 i3-input 是为此目的创建的工具:它允许你输入命令并将命令发送到 i3。 它还可以为该命令添加前缀并为输入对话框显示自定义提示。

如果窗口已经有这个标记,附加的 --toggle 选项将删除该标记,否则将添加它。 请注意,你可能需要将此与 --add(见下文)结合使用,否则任何其他标记都将被删除。

--replace 参数使 i3 删除任何现有标记,这也是默认行为。 你可以使用 --add 标志在窗口上放置多个标记。

如果你不想在窗口装饰中显示标记,请参阅 显示标记

语法:

mark [--add|--replace] [--toggle] <identifier>
[con_mark="identifier"] focus
unmark <identifier>

你可以使用 i3-input 提示输入标记名称,然后使用 markfocus 命令创建并跳转到自定义标记:

例子:

# 读取 1 个字符并用该字符标记当前窗口
bindsym $mod+m exec i3-input -F 'mark %s' -l 1 -P 'Mark: '

# 读取 1 个字符并转到带有该字符的窗口
bindsym $mod+g exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Goto: '

或者,如果你不想弄乱 i3-input,你可以为一组特定的标签创建单独的绑定,然后只使用这些标签:

例子(在终端):

# 标记焦点容器
mark irssi

# 从任何有它的容器中删除标记“irssi”
'[con_mark="irssi"] focus'

# remove the mark "irssi" from whichever container has it
unmark irssi

# 删除所有 firefox 窗口上的所有标记
[class="(?i)firefox"] unmark