我已经开始使用 i3,并设置了一些键盘符号来重命名工作区,就像文档中所说的那样:
bindsym $mod+r i3-input -F 'rename workspace to "%s"' -P 'New name: '
现在我注意到并非所有输入都被接受:如果我输入工作区名称(如“Mail&News”),则工作区将被重命名为空字符串。
我还没有找到解决这个问题的方法——这可能是一个错误吗?
答案1
(此答案是错误报告我发帖了。感谢 Airblader 的快速回复。)
你可能已经设置font
了i3配置使用 Pango。例如:
font "pango:SomeFont 12"
来自i3 用户指南:
工作区名称解析为Pango 标记作者:i3bar。
Pango 标记基于 XML,因为诸如&
和之类的字符<
具有特殊含义,因为它们是 XML 语法的一部分。
如果您希望在工作区名称中使用&
或<
,则必须将其转义并改为使用&
或<
:
rename workspace to "Mail&News"
rename workspace to "ten<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//&/&}
# escape less-than sign also because of pango
wsname=${wsname//</<}
# 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