i3 窗口管理器:命令中的与符号 (&)

i3 窗口管理器:命令中的与符号 (&)

我已经开始使用 i3,并设置了一些键盘符号来重命名工作区,就像文档中所说的那样:

bindsym $mod+r i3-input -F 'rename workspace to "%s"' -P 'New name: '

现在我注意到并非所有输入都被接受:如果我输入工作区名称(如“Mail&News”),则工作区将被重命名为空字符串。

我还没有找到解决这个问题的方法——这可能是一个错误吗?

答案1

(此答案是错误报告我发帖了。感谢 Airblader 的快速回复。)

你可能已经设置fonti3配置使用 Pango。例如:

font "pango:SomeFont 12"

来自i3 用户指南

工作区名称解析为Pango 标记作者:i3bar。

Pango 标记基于 XML,因为诸如&和之类的字符<具有特殊含义,因为它们是 XML 语法的一部分。

如果您希望在工作区名称中使用&<,则必须将其转义并改为使用&amp;&lt;

rename workspace to "Mail&amp;News"
rename workspace to "ten&lt;eleven"

当然,使用 重命名时,这种方法相当笨重i3-input。您可以使用dmenu更人性化的方法。

将以下脚本保存为workspace-renamer.sh并使其可执行:

#!/bin/bash -

# get name from dmenu. 
$wsname=$(echo -n | dmenu)
# escape backslashes to avoid inadvertently escaping other characters
wsname=${wsname//\\/\\\\}
# escape double quotes as the name is passed inside double quotes to i3-msg
wsname=${wsname//\"/\\\"}
# escape ampersand because of pango
wsname=${wsname//&/&amp;}
# escape less-than sign also because of pango
wsname=${wsname//</&lt;}

# call i3-msg to rename workspace
i3-msg rename workspace to "\"${wsname}\""

然后将其添加到您的i3配置:

bindsym $mod+r exec --no-startup-id /path/to/workspace-renamer.sh

这会自动转义\"和,这样您输入的名称就会显示在 i3bar 中。这当然只是一个快速原型,还有待进一步改进。例如,您可以用提供换行符分隔的选项列表作为预设来&替换。<echo -n

相关内容